如何使用 bc 将浮点值舍入或转换为 int?获取:“(standard_in) 1:语法错误”

如何使用 bc 将浮点值舍入或转换为 int?获取:“(standard_in) 1:语法错误”

我将获得像 2743410360.320 这样的值,并且我想要像 2743410360 这样的值给变量。

我试过

INTValueOfGB=$ echo "($gb+0.5)/1" | bc

但我越来越 (standard_in) 1: syntax error

答案1

您可以用于printf舍入:

$ printf "%.0f" 2743410360.320

答案2

我没有看到@vin 问题的答案,即:

但我越来越(standard_in) 1: syntax error

bc命令打印是(standard_in) 1: syntax error因为 shell 变量gb未设置:

$ unset gb
$ echo "($gb+0.5)/1" | bc
(standard_in) 1: syntax error

$ gb=2743410360.320
$ echo "($gb+0.5)/1" | bc
2743410360

在对 @dchirikov 答案的评论中,@vin 说printf "%.0f"“不起作用”:

$ unset gb
$ printf '%.0f\n' $gb
0

$ gb=2743410360.320
$ printf '%.0f\n' $gb
2743410360

在 @vin 遇到问题的两个区域中,未设置的变量会重现该问题,并且设置该变量可以解决该问题。

答案3

$ p=2743410360.320
$ echo $p
2743410360.320
$ echo ${p%%.*}
2743410360

答案4

您的命令需要几个( )

INTValueOfGB=$( echo "($gb+0.5)/1" | bc )

但这不会对数字进行四舍五入,为此,您需要将比例设置为 0:

INTValueOfGB=$( echo "scale=0;($gb+0.5)/1" | bc )

这将(从 x.5)向上舍入到下一个整数。

要获得“舍入到下一个偶数”(银行家规则),您需要使用 printf 舍入:

LC_NUMERIC=C printf "%.0f" 2743410360.320

LC_NUMERIC 用于确保数字以点作为十进制进行处理。这不是德国用户喜欢使用的,这应该适用于小数,

$ LC_NUMERIC=de_DE.utf8 printf "%.0f" 2743410360,320
2743410360

相关内容