【问题标题】:PHP round shows incorrect number when decimal place is longer [duplicate]当小数位较长时,PHP回合显示不正确的数字[重复]
【发布时间】:2020-01-22 09:04:33
【问题描述】:

取以下代码:

echo round(1215.49999);

我得到的答案是1215,这就是我想要的。

但是,当你写这个时:

echo round(1215.499999999999999);

我得到的答案是1216

这有什么特别的原因吗?在这两种情况下,我都想以1215 结束。

【问题讨论】:

标签: php rounding


【解决方案1】:

如果输入 1215.499999999999999 从 php 被解释为浮点数,那么一切都来不及四舍五入。那么这个数字就等于 1215.5

测试:

var_dump(1215.499999999999999 === 1215.5); //bool(true)

如果输入要四舍五入,必须使用bcmat,输入为字符串。

$input = '1215.499999999999999';
echo bcadd($input,0.5,0);  //1215

$input = '1215.5000000000000000';
echo bcadd($input,0.5,0);  //1216

【讨论】:

    【解决方案2】:

    如果您想使用内置 PHP 函数而不是自己编写函数,可以使用 bcdiv

    您需要在您的 php.ini 文件中启用 bcmath 才能使用 bcmath 函数,这可能已经启用,但如果没有,它应该只是包含以下内容的情况:

    --enable-bcmath
    

    示例 1:

    echo bcdiv(1215.49999, 1, 2);
    

    示例 2:

    echo bcdiv(1215.499999999999999, 1, 2);
    

    以上两个例子都会输出1215

    来源:

    Source 1

    Source 2

    Source 3

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多