【问题标题】:array_sum PHP wrong result [duplicate]array_sum PHP错误结果[重复]
【发布时间】:2019-03-04 11:56:43
【问题描述】:

这个结果应该是零!

echo array_sum([-61.50,50.00,10.50,1.00,0.00,50.00,-16.73,-20.00,-55.75,42.48]);

为什么要给-7.105427357601E-15?

【问题讨论】:

    标签: php array-sum


    【解决方案1】:

    试试round(),你会得到同样的结果。

    echo round(array_sum([-61.50,50.00,10.50,1.00,0.00,50.00,-16.73,-20.00,-55.75,42.48]));
    

    【讨论】:

    • 但我需要浮点数... round(array_sum([-61.50,50.00,10.50,1.00,0.00,50.00,-16.73,-20.00,-55.75,42.48]),2) ;工作正常:)
    【解决方案2】:

    因为浮点值(当您使用小数时会出现在此处)并不精确。 They're approximations.

    当对这些值求和时,该近似值的错误出现在-7.105427357601E-15。

    【讨论】:

      【解决方案3】:

      这是因为浮动。如果你想计算精度为 2 的东西(对于这个例子),你应该使用这样的东西:

      $el = [-61.50,50.00,10.50,1.00,0.00,50.00,-16.73,-20.00,-55.75,42.48];
      $sum = 0;
      foreach ($el as $e) {
          $sum += $e * 100;
      }
      
      echo $sum / 100;
      

      你永远不应该相信浮动值。另一个来自 Javascript(谷歌开发者控制台)的例子:

      【讨论】:

      • 是的...但是 JavaScript 是从数学转储中知道的!没想到 PHP 会这样
      猜你喜欢
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 2021-02-11
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2016-03-19
      相关资源
      最近更新 更多