我将获得像 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