问题描述
bc
将数字处理为整数:
# echo "100/3" | bc
33
bc -l
将数字作为浮点对象处理:
# echo "100/3" | bc -l
33.33333333333333333333
有没有办法限制小数点后的位数?
最佳解决办法
设置scale
特殊变量:
$ echo "scale=2; 100/3" | bc
33.33
次佳解决办法
scale
仅适用于分部;如果一些极客在乘法中需要它,那么你可以通过使用字符串操作来实现这一点。假如你需要乘以32 * 0.60
,答案是19.20
。如果您需要单独获得它,您可以通过不同的方法获得它。
-
使用字符串操作
$ S=$(echo "32*.60" | bc ) ; echo ${S%.*} 19
String Manipulation语法:
${Variable%pattern}
,这将删除%
之后的短匹配模式。有关更多字符串操作的详细信息,请参阅the Advanced Bash-Scripting Guide。 -
使用按照**时间表所述的量表**
$ echo "scale=0; 32*60/100" | bc 19
-
要摆脱尾随的0,而不是字符串操作,也可以除以1。
$ echo "0.232 * 1000" | bc 232.000 $ echo "0.232 * 1000 / 1" | bc 232
第三种解决办法
除了以前的答案
echo "scale=2; 1.0150876" | bc
返回
1.0150876
添加数学运算只能得到2个十进制数 – (NUMBER * 100)/100
echo "scale=2; (1.0150876 * 100) / 100" | bc
现在回来了
1.01
第四种办法
你也可以使用printf命令将结果舍入到3位小数
# printf "%.3f\n" $(echo "100/3" | bc -l)
3.333