可能重复:
如何让 bc(1) 打印前导零?
我有这个问题:
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
只需一行:
printf '%.2f\n' $(echo 0.82+0.01 | bc)
或者
echo 0.82+0.01 | printf '%.2f\n' $(bc)
最简单的解决方案是将结果附加到已经包含“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
不幸的是,以前的代码不起作用。第二行的意思是用 string 替换第一个字符,如果它是一个点,0.
但显然我犯了语法错误。我对正则表达式不是很了解,但这应该正是您正在寻找的。
以下是更麻烦的,但防御性的作品。
x=$(echo "1.81+0.02" | bc )
if [[ $x == .* ]]; then
x=0$x
fi