【问题标题】:bash and bc math calculation with decimal point带小数点的 bash 和 bc 数学计算
【发布时间】:2017-08-14 19:59:18
【问题描述】:

我正在尝试使用“bc”在 Bash 脚本中实现以下计算,但“scale”选项产生的结果不正确,最后有 2 个额外的零,这意味着我必须手动修剪它(丑陋)。

计算:

((2592000-239)÷2592000)×100

预期结果:99,990779321(但我只想显示 2 个小数位)

在 Bash 中:

echo "scale=2; ((2592000-239)/2592000)*100" | bc

99.00

echo "scale=3; ((2592000-239)/2592000)*100" | bc

99.900

echo "scale=4; ((2592000-239)/2592000)*100" | bc

99.9900

echo "scale=5; ((2592000-239)/2592000)*100" | bc

99.99000

echo "scale=8; ((2592000-239)/2592000)*100" | bc

echo "scale=8; ((2592000-239)/2592000)*100" | bc

99.99077900

echo "scale=10; ((2592000-239)/2592000)*100" | bc

99.9907793200

根据手册页:

数字 bc中最基本的元素是数字。数字是任意精度的数字。这个精度都是整数 部分和小数部分。所有数字都表示 内部为十进制,所有计算均以十进制完成。 (此版本截断除法和乘法运算的结果。) 数字有两个属性,长度 和规模。长度是数字中有效小数位数的总数,比例是数字的总数 小数点后的小数位数。例如: .000001 的长度为 6,比例为 6。 1935.000 的长度为 7,比例为 3。

我理解正确吗?

【问题讨论】:

    标签: bash math decimal-point bc


    【解决方案1】:

    你可以使用:

    echo 'scale=2; 100*(2592000-239)/2592000' | bc -l
    
    99.99
    

    你得到99.00,因为你先除法得到.99,当它乘以100时,它变成99.00(由于scale-2

    【讨论】:

      【解决方案2】:

      如果您不想检查您的 bc 语句以获取正确的数学运算顺序,(比例适用于除法)只需使用默认精度计算 bc 格式输出为 bash,喜欢:

      printf "%.2f\n" $( bc -l <<< '((2592000-239)/2592000)*100' )
      # 99.99
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多