Math.round()四舍五入疑惑
发布于 8 年前 作者 jingsam 7989 次浏览 来自 问答
// 返回-20
x = Math.round(-20.5)

// 返回-21
x = Math.round(-20.51)

为什么?

7 回复

Math.round(-0.5) => -0与 Math.round(-0.51) => -1, ECMA规范: untitled1.png

Math.round()这个函数其实是【四舍六入五成双】 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数) 参考: 四舍六入五成双

@jingsam

这个和下边是一个道理

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 好像不是这样吧?

临界点,向右靠,不知道这样理解对不

回到顶部