我有这个问题:
x=$(echo "0.81+0.02" |bc)
echo $x
结果 .83
我想看到0.83,但我没有成功。
答案 0 :(得分:2)
echo
对浮点数没有任何了解,它只知道字符串和整数。
您可以使用printf
处理其他数据类型并指定精确的格式选项:
printf '%.2f\n' $x
示例:
imac:barmar $ x=$(echo "0.81+0.02" |bc)
imac:barmar $ printf '%.2f\n' $x
0.83
答案 1 :(得分:0)
最简单的解决方案是将结果附加到已包含“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
答案 2 :(得分:0)
只需一行:
printf '%.2f\n' $(echo 0.82+0.01 | bc)
或
echo 0.82+0.01 | printf '%.2f\n' $(bc)