我发现一个很奇怪的问题,问题是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具有相同的结果?
这不是问题,它有据可查
如果小数部分正好是 0.5,则参数将四舍五入到 +? 方向上的下一个整数。请注意,这与许多语言的 round() 函数不同,后者通常将这种情况舍入到远离零的下一个整数,而不是(在小数部分为 0.5 的负数的情况下给出不同的结果)。
如果你想在 Javascript 上有相同的行为,我会使用
var n = -175.5;
var round = Math.round(Math.abs(n))*(-1)
Run Code Online (Sandbox Code Playgroud)
一个快速的解决方案是执行以下操作:
echo round(-175.5, 0, PHP_ROUND_HALF_DOWN); // -175
Run Code Online (Sandbox Code Playgroud)
还有其他模式可供选择:
PHP_ROUND_HALF_UP- 默认PHP_ROUND_HALF_EVENPHP_ROUND_HALF_ODD请参阅文档以获取更多信息。
此函数的行为与javascript中的相同:
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)
| 归档时间: |
|
| 查看次数: |
1769 次 |
| 最近记录: |