【问题标题】:shell script where bc loses precisionbc 失去精度的shell脚本
【发布时间】:2013-04-03 17:35:01
【问题描述】:
#! /bin/sh
a1=260
a2=9150
echo "$a1 * 100 / $a2" | bc

输出是

2

它应该在哪里

2.8415

为什么我使用 bc 会丢失精度?

【问题讨论】:

    标签: shell math bc


    【解决方案1】:

    试试这个(易于重复使用,您只需要记住在数学表达式前面加上scale=N):

    $ echo "scale=10; $a1 * 100 / $a2" | bc
    2.8415300546
    

    如您所见,您可以根据需要指定刻度长度。

    man bc | less +/^' *scale \(\s*exp
    

    【讨论】:

      【解决方案2】:

      可以加载数学库:bc -l

      #! /bin/sh
      a1=260
      a2=9150
      echo "$a1 * 100 / $a2" | bc -l
      

      输出是

      2.84153005464480874316
      

      【讨论】:

        【解决方案3】:

        您可以使用 awk 获得更好的算术:

        awk -v a1=260 -v a2=9150 'BEGIN{printf("%.4f\n", (a1 * 100 / a2))}' 
        

        输出: 2.8415

        【讨论】:

        • 哪种方式更好看起来更复杂
        • @user568109:我的意思是 awk 提供了比标准 bash 更好的算术能力,顺便说一句,您觉得哪个部分看起来很复杂?
        • 你可以很容易地用 bc 做到这一点,并且 OP 没有要求 awk
        • bc 是专为数学设计的,我没有看到任何相关点 awk 会更好,而且,他已经使用了 bc
        • @user568109 我到底在哪里说awk is better than bc 我刚刚提出了另一个选项来执行标准bash 中不可用的浮点运算(bc 也是一个外部工具)。
        猜你喜欢
        • 1970-01-01
        • 2012-05-14
        • 2014-01-13
        • 2015-09-11
        • 2011-03-17
        • 2014-12-09
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        相关资源
        最近更新 更多