bc:设置小数点后的位数

bc:设置小数点后的位数

bc将数字作为整数处理:

# echo "100/3" | bc
33

bc -l将数字作为浮点对象处理:

# echo "100/3" | bc -l
33.33333333333333333333

有没有办法限制小数点后的位数?

答案1

设置scale特殊变量:

$ echo "scale=2; 100/3" | bc
33.33

答案2

scale仅适用于除法;如果某些极客需要在乘法中使用,那么您可以使用字符串操作来实现。假设您需要乘以32 * 0.60,答案是19.20。如果您需要在答案中单独得到 19,则可以通过不同的方法获得它。

  1. 使用字符串操作

    $ S=$(echo "32*.60" | bc ) ; echo ${S%.*}
    19
    

    字符串操作语法:${Variable%pattern},这将删除后面的短匹配模式%。有关字符串操作的更多详细信息,请参阅高级 Bash 脚本指南

  2. Scale按照说明使用**chronitis**

    $ echo "scale=0; 32*60/100" | bc
    19
    
  3. 为了去掉尾随的 0,除了进行字符串操作之外,还可以将其除以 1。

    $ echo "0.232 * 1000" | bc
    232.000
    
    $ echo "0.232 * 1000 / 1" | bc
    232
    

答案3

您还可以使用 printf 命令将结果四舍五入到小数点后 3 位

# printf "%.3f\n" $(echo "100/3" | bc -l)
3.333

答案4

四舍五入

scale=2 将答案截断为两位小数,但我们可以像这样实现四舍五入:

$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12

相关内容