Você pode usar printf
para arredondamento:
$ printf "%.0f" 2743410360.320
Vou obter valor como 2743410360.320 e quero um valor como 2743410360 para uma variável.
Eu tentei
INTValueOfGB=$ echo "($gb+0.5)/1" | bc
Mas estou recebendo (standard_in) 1: syntax error
Você pode usar printf
para arredondamento:
$ printf "%.0f" 2743410360.320
$ p=2743410360.320
$ echo $p
2743410360.320
$ echo ${p%%.*}
2743410360
Eu não vejo uma resposta para o problema do @ vin, que é:
But I am getting
(standard_in) 1: syntax error
O comando bc
imprime (standard_in) 1: syntax error
porque a variável gb
da shell não está definida:
$ unset gb
$ echo "($gb+0.5)/1" | bc
(standard_in) 1: syntax error
$ gb=2743410360.320
$ echo "($gb+0.5)/1" | bc
2743410360
Nos comentários à resposta do @ dchirikov, @vin diz que printf "%.0f"
não está funcionando:
$ unset gb
$ printf '%.0f\n' $gb
0
$ gb=2743410360.320
$ printf '%.0f\n' $gb
2743410360
Em ambas as áreas onde @vin tem problemas, a variável unset reproduz o problema, e a configuração da variável resolve o problema.
Seu comando precisa de alguns ( )
:
INTValueOfGB=$( echo "($gb+0.5)/1" | bc )
Mas isso não arredondará o número, para que isso funcione, você precisa definir a escala como 0:
INTValueOfGB=$( echo "scale=0;($gb+0.5)/1" | bc )
Isso arredondará (de x.5) para o próximo inteiro.
Para "arredondar para o próximo número inteiro" (Regra do banqueiro), é necessário usar o arredondamento de impressão:
LC_NUMERIC=C printf "%.0f" 2743410360.320
O LC_NUMERIC serve para garantir que os números sejam processados com um ponto como decimal.
Não é isso que os usuários na Alemanha gostariam de usar, isso deve funcionar com decimais com ,
:
$ LC_NUMERIC=de_DE.utf8 printf "%.0f" 2743410360,320
2743410360