【发布时间】:2012-10-25 11:00:21
【问题描述】:
我有这个问题:
x=$(echo "0.81+0.02" |bc)
echo $x
结果.83
我想看到 0.83,但我没有成功。
【问题讨论】:
我有这个问题:
x=$(echo "0.81+0.02" |bc)
echo $x
结果.83
我想看到 0.83,但我没有成功。
【问题讨论】:
echo 对浮点数一无所知,它只知道字符串和整数。
您可以使用printf 处理其他数据类型并指定精确的格式选项:
printf '%.2f\n' $x
例子:
imac:barmar $ x=$(echo "0.81+0.02" |bc)
imac:barmar $ printf '%.2f\n' $x
0.83
【讨论】:
'%.2f\n',而不是'$x.2f\n'
printf的文档,它解释了格式字符串。
最简单的解决方案是将结果附加到已经包含“0”字符的字符串中。
x=0
x+=$(echo "0.81+0.02" |bc)
echo $x
如果您希望能够处理数字可能大于 1 的情况,您可以改用参数替换
x=$(echo "1.81+0.02" | bc )
x=${x/^./0.}
echo $x
很遗憾,前面的代码不起作用。第二行的意思是用字符串0. 替换第一个字符(如果是点),但显然我犯了语法错误。我对正则表达式不是很了解,但这应该正是您正在寻找的。p>
下面的方法比较麻烦,但可以防御。
x=$(echo "1.81+0.02" | bc )
if [[ $x == .* ]]; then
x=0$x
fi
【讨论】:
只需一行:
printf '%.2f\n' $(echo 0.82+0.01 | bc)
或
echo 0.82+0.01 | printf '%.2f\n' $(bc)
【讨论】: