我发现了一个非常奇怪的问题,问题是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具有相同的结果?
答案 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
还有其他模式可供选择:
PHP_ROUND_HALF_UP
- 默认 PHP_ROUND_HALF_EVEN
PHP_ROUND_HALF_ODD
有关详细信息,请参阅documentation。
此功能的行为与javascript中的相同:
function jsround($float, $precision = 0){
if($float < 0){
return round($float, $precision, PHP_ROUND_HALF_DOWN);
}
return round($float, $precision);
}
答案 2 :(得分:1)
要控制它,请使用ceil
和floor
进行舍入。这样你可以选择哪种方式来回合
答案 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);
}