【问题标题】:PHP ROUND vs Javascript ROUNDPHP ROUND vs Javascript ROUND
【发布时间】:2017-03-14 16:12:21
【问题描述】:

我发现一个很奇怪的问题,问题是PHP和Javascript中的ROUND方法计算结果不一样!?

请看下面的例子:

PHP

echo round(175.5); // 176
echo round(-175.5); // -176

Javascript

console.log(Math.round(175.5)); // 176
console.log(Math.round(-175.5)); // -175 <-why not -176!!??

有人知道为什么吗?以及如何让Javascript和PHP的结果一样?

【问题讨论】:

标签: javascript php


【解决方案1】:

这不是问题,很好documented

如果小数部分正好是 0.5,则参数四舍五入为 +∞ 方向的下一个整数。请注意,这不同于 许多语言的 round() 函数,通常将这种情况四舍五入到 下一个远离零的整数,而不是(在 小数部分正好为 0.5 的负数的情况)。

如果您希望在 Javascript 上具有相同的行为,我会使用

var n = -175.5;
var round = Math.round(Math.abs(n))*(-1)

【讨论】:

    【解决方案2】:

    一个快速的解决方案是执行以下操作:

    echo round(-175.5, 0, PHP_ROUND_HALF_DOWN); // -175
    

    还有其他模式可供选择:

    1. PHP_ROUND_HALF_UP - 默认
    2. PHP_ROUND_HALF_EVEN
    3. PHP_ROUND_HALF_ODD

    请参阅documentation 了解更多信息。

    此函数的行为与 中的相同:

    function jsround($float, $precision = 0){
      if($float < 0){
         return round($float, $precision, PHP_ROUND_HALF_DOWN);
      }
    
      return round($float, $precision);
    }
    

    【讨论】:

    • 谢谢你的回答,你的回答也很有用但只能选择一个:(.
    • 别担心,您最好是想要-176 的值,这只是回答如何从php 控制相同的值。
    【解决方案3】:
    console.log(Math.round(175.5)); // 176
    console.log(Math.round(-175.5)); // -175 <-why not -176!!??
    

    175.5 其轮值 176 其值增加。

    -175.5 舍入值为 -175。因为当我舍入 -175.5 时,它也会增加,这意味着 -175>-176。

    【讨论】:

      【解决方案4】:

      为了更好地控制它,请使用ceilfloor 进行舍入。这样你就可以选择哪种方式进行舍入

      【讨论】:

        【解决方案5】:

        或者...如果您希望 JavaScript 的行为与 PHP 相同,请使用:

        function phpRound(number) {
          if(number < 0)
            return 0 - Math.round(0 - number);
          return Math.round(number);
        }
        

        【讨论】:

          猜你喜欢
          • 2014-03-12
          • 2018-12-02
          • 1970-01-01
          • 2015-10-18
          • 1970-01-01
          • 1970-01-01
          • 2012-06-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多