我们在javascript中遇到了Math.round()的问题.问题是此函数不能正确舍入负数.例如 :
1.5~ = 2
0.5~ = 1
-0.5~ = 0 //错了
-1.5~ = -1 //错了
根据算术舍入,这是不正确的.-0.5的正确数字应为-1,-1.5应为-2.
有没有标准的方法,在Javascript中正确舍入负数?
Math.round
转换为正数后应用,最后回滚符号.在哪里可以使用Math.sign
方法从数字中获取符号并Math.abs
获得数字的绝对值.
console.log( Math.sign(num) * Math.round(Math.sign(num) * num), // or Math.sign(num) * Math.round(Math.abs(num)) )
var nums = [-0.5, 1.5, 3, 3.6, -4.8, -1.3];
nums.forEach(function(num) {
console.log(
Math.sign(num) * Math.round(Math.sign(num) * num),
Math.sign(num) * Math.round(Math.abs(num))
)
});
你可以在ES5中保存标志并稍后申请;
function round(v) {
return (v >= 0 || -1) * Math.round(Math.abs(v));
}
console.log(round(1.5)); // 2
console.log(round(0.5)); // 1
console.log(round(-1.5)); // -2
console.log(round(-0.5)); // -1