3

可能重复:
如何让 bc(1) 打印前导零?

我有这个问题:

x=$(echo "0.81+0.02" |bc)
echo $x

结果.83

我想看到 0.83,但我没有成功。

4

3 回答 3

2

echo对浮点数一无所知,它只知道字符串和整数。

您可以使用它printf来处理其他数据类型并指定精确的格式选项:

printf '%.2f\n' $x

例子:

imac:barmar $ x=$(echo "0.81+0.02" |bc)
imac:barmar $ printf '%.2f\n' $x
0.83
于 2012-10-25T11:05:12.867 回答
0

只需一行:

printf '%.2f\n' $(echo 0.82+0.01 | bc)

或者

echo 0.82+0.01 | printf '%.2f\n' $(bc)
于 2012-10-25T14:32:58.413 回答
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

不幸的是,以前的代码不起作用。第二行的意思是用 string 替换第一个字符,如果它是一个点,0.但显然我犯了语法错误。我对正则表达式不是很了解,但这应该正是您正在寻找的。

以下是更麻烦的,但防御性的作品。

x=$(echo "1.81+0.02" | bc )
if [[ $x == .* ]]; then
   x=0$x
fi
于 2012-10-25T11:08:47.723 回答