Javascript 当值为0.5时,为什么Math.round()不向上取整?

Javascript 当值为0.5时,为什么Math.round()不向上取整?,javascript,floating-point,rounding-error,Javascript,Floating Point,Rounding Error,目前有一个基本上如下所示的公式: Math.round((20.49-14.99)*5); 得到的数字是27.5,如果数字大于等于0.5,则应向上取整;如果数字小于等于0.5,则应向下取整。除非我误解了,否则我假设结果将被四舍五入到28(例如,在Microsoft Excel中),但相反,它将被四舍五入到27 起初我认为这与我的代码有关,但当我将其记录在控制台上时,结果完全相同 我是否遗漏了什么?如果遗漏了,我将如何从0.5开始进行取整?由于浮点运算的方式,(20.49-14.99)*5的结果

目前有一个基本上如下所示的公式:

Math.round((20.49-14.99)*5);
得到的数字是27.5,如果数字大于等于0.5,则应向上取整;如果数字小于等于0.5,则应向下取整。除非我误解了,否则我假设结果将被四舍五入到28(例如,在Microsoft Excel中),但相反,它将被四舍五入到27

起初我认为这与我的代码有关,但当我将其记录在控制台上时,结果完全相同


我是否遗漏了什么?如果遗漏了,我将如何从0.5开始进行取整?

由于浮点运算的方式,
(20.49-14.99)*5
的结果实际上是
27.4999999999993
,它比28更接近27

(20.49-14.99)*5
27.49999999993,所以JavaScript会将其舍入到更接近的值。你应该使用
Math.ceil
来舍入上面的值

好吧,当涉及到js数学时很有趣,检查
20.49-14.99的结果
,你可以在控制台中输入它,然后看到神奇的(20.49-14.99)*5=27.4999999,它舍入到27,因为IEEE-754浮点值是如何处理的。
(20.49-14.99)*5
的计算结果为
27.499999999
,而不是
27.5
,这是由于浮点值的处理方式。@ruby_newbie这不是“因为JavaScript”,而是因为IEEE-754浮点值就是这样工作的。其他语言也会表现出同样的行为。之所以会出现这种情况,是因为
14.99
20.49
无法用二进制精确表示。目前使用此公式显示价格和ceil(或下限)无法准确表示我收到的Excel电子表格。就个人而言,我对精确取整(事实上是这样)没有问题,但显然,电子表格的不一致性是一个问题。