PHP ROUND与Javascript ROUND

时间:2017-03-14 16:12:22

标签: javascript php

我发现了一个非常奇怪的问题,问题是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具有相同的结果?

5 个答案:

答案 0 :(得分:4)

这不是问题,很好documented

  

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

如果你想在Javascript上使用相同的行为,我会使用

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

答案 1 :(得分:4)

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

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
  4. 有关详细信息,请参阅documentation

    此功能的行为与中的相同:

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

答案 2 :(得分:1)

要控制它,请使用ceilfloor进行舍入。这样你可以选择哪种方式来回合

答案 3 :(得分:1)

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 :(得分:0)

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

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