bash脚本中的格式十进制错误

时间:2012-10-25 11:00:22

标签: bash format

  

可能重复:
  How do I get bc(1) to print the leading zero?

我有这个问题:

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

结果 .83

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

3 个答案:

答案 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.替换第一个字符(如果是点),但显然我犯了语法错误。我不是很了解正则表达式,但这应该是你正在寻找的。

以下情况更为繁琐,但是有缺陷效果。

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)