bc:设置小数点后的位数

Ada*_*tan 72 command-line bc

bc 将数字作为整数处理:

# echo "100/3" | bc
33
Run Code Online (Sandbox Code Playgroud)

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

# echo "100/3" | bc -l
33.33333333333333333333
Run Code Online (Sandbox Code Playgroud)

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

chr*_*tis 99

设置scale特殊变量:

$ echo "scale=2; 100/3" | bc
33.33
Run Code Online (Sandbox Code Playgroud)

  • 您可以保持精度,直到以这种方式打印值:`echo "result = (100/180) * 180; scale=2; result / 1" | bc -l`。现在你得到“99.99”。 (6认同)
  • 请参阅@Wok 对该问题的评论。 (3认同)

SAG*_*air 16

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

  1. 使用字符串操作

    $ S=$(echo "32*.60" | bc ) ; echo ${S%.*}
    19
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 使用Scale如所述**chronitis**

    $ echo "scale=0; 32*60/100" | bc
    19
    
    Run Code Online (Sandbox Code Playgroud)
  3. 为了去掉尾随的 0,除了字符串操作之外,还可以除以 1。

    $ echo "0.232 * 1000" | bc
    232.000
    
    $ echo "0.232 * 1000 / 1" | bc
    232
    
    Run Code Online (Sandbox Code Playgroud)

  • 特别感谢您提示除以 1 可以去掉小数部分! (2认同)

小智 9

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

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


小智 5

除了之前的回答

echo "scale=2; 1.0150876" | bc
Run Code Online (Sandbox Code Playgroud)

退货

1.0150876
Run Code Online (Sandbox Code Playgroud)

添加数学运算以仅获得 2 个十进制数字 - (NUMBER*100)/100

echo "scale=2; (1.0150876 * 100) / 100" | bc
Run Code Online (Sandbox Code Playgroud)

现在返回

1.01
Run Code Online (Sandbox Code Playgroud)