Math.round()四舍五入疑惑
// 返回-20
x = Math.round(-20.5)
// 返回-21
x = Math.round(-20.51)
为什么?
7 回复
Math.round(-0.5) => -0与 Math.round(-0.51) => -1, ECMA规范:
@ncuzp 多谢
Math.round()这个函数其实是【四舍六入五成双】 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数) 参考: 四舍六入五成双
这个和下边是一个道理
var x = Math.round(20.5) //21
var y = Math.round(20.49) //20
向大的数靠是「入」,向小的数靠是「舍」,.5 是个界, >= .5 的入上,< .5 的舍去, -0.51 < -0.5 所以就「舍」了嘛,结果是 -21,-0.5>=-0.5 所以就「入」了嘛,结果 -20
这是一个数学问题啊,你画个数轴看看就清楚了,另外
// 返回-20
x = Math.trunc(-20.5)
// 返回-20
x = Math.trunc(-20.51)
@WindTrace 好像不是这样吧?
临界点,向右靠,不知道这样理解对不