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

vin*_*vin 5 shell-script conversion bc floating-point variable

我会得到像 2743410360.320 这样的值,我想要像 2743410360 这样的值给一个变量。

我试过

INTValueOfGB=$ echo "($gb+0.5)/1" | bc
Run Code Online (Sandbox Code Playgroud)

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

dch*_*kov 8

您可以printf用于四舍五入:

$ printf "%.0f" 2743410360.320
Run Code Online (Sandbox Code Playgroud)


mic*_*has 5

$ p=2743410360.320
$ echo $p
2743410360.320
$ echo ${p%%.*}
2743410360
Run Code Online (Sandbox Code Playgroud)

  • 原始代码中的“+0.5”看起来像是需要_rounding_。 (3认同)

Rob*_*rtL 5

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

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

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

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

$ gb=2743410360.320
$ echo "($gb+0.5)/1" | bc
2743410360
Run Code Online (Sandbox Code Playgroud)

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

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

$ gb=2743410360.320
$ printf '%.0f\n' $gb
2743410360
Run Code Online (Sandbox Code Playgroud)

在@vin出现问题的两个区域,unset变量重现问题,设置变量解决问题。