PHP ROUND对比Javascript ROUND

Jas*_*per 3 javascript php

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

请参见以下示例:

的PHP

echo round(175.5); // 176
echo round(-175.5); // -176
Run Code Online (Sandbox Code Playgroud)

Java脚本

console.log(Math.round(175.5)); // 176
console.log(Math.round(-175.5)); // -175 <-why not -176!!??
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?以及如何使Javascript和PHP具有相同的结果?

DrK*_*Key 5

这不是问题,它有据可查

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

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

var n = -175.5;
var round = Math.round(Math.abs(n))*(-1)
Run Code Online (Sandbox Code Playgroud)


Xor*_*lse 5

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

echo round(-175.5, 0, PHP_ROUND_HALF_DOWN); // -175
Run Code Online (Sandbox Code Playgroud)

还有其他模式可供选择:

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

请参阅文档以获取更多信息。

此函数的行为与的相同:

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

  return round($float, $precision);
}
Run Code Online (Sandbox Code Playgroud)