为什么Java和Javascript将Math.round(-1.5)改为-1?
今天我了解了Java和Javascript的Math.round函数的这种行为 它使(1.40)到1以及(-1.40)到-1 它使(1.60)到2以及(-1.60)到-2 现在,它是(1.5)到2。 但是,使(-1.5)变为-1。 我也在PhP和MySQL的对等版本中检查了这种行为。 两人都给出了预期的结果。i、 e.四舍五入(-1.5)至-2 甚至连最新的算法都说应该将其四舍五入到最接近的整数为什么Java和Javascript将Math.round(-1.5)改为-1?,javascript,java,rounding,negative-number,Javascript,Java,Rounding,Negative Number,今天我了解了Java和Javascript的Math.round函数的这种行为 它使(1.40)到1以及(-1.40)到-1 它使(1.60)到2以及(-1.60)到-2 现在,它是(1.5)到2。 但是,使(-1.5)变为-1。 我也在PhP和MySQL的对等版本中检查了这种行为。 两人都给出了预期的结果。i、 e.四舍五入(-1.5)至-2 甚至连最新的算法都说应该将其四舍五入到最接近的整数 想知道为什么会这样吗?舍入模式是向负无穷大舍入。如果结果为正,则按取整模式操作。DOWN;如果为负值
想知道为什么会这样吗?舍入模式是向负无穷大舍入。如果结果为正,则按取整模式操作。
DOWN
;如果为负值,则表现为舍入模式
向上。请注意,此舍入模式从不增加计算值。
这只是一个整数的问题,以及它在数字图表中的位置。从中可以看到javadocs
public static int round(float a)
返回与参数最接近的整数,并向上取整
Special cases:
- 如果参数为
,则结果为0NaN
- 如果参数为负无穷大或任何小于或等于
的值,则结果等于Integer.MIN_value
的值Integer.MIN_value
- 如果参数为正无穷大或任何大于或等于
的值,则结果等于Integer.MAX_value
的值 参数:Integer.MAX_value
Returns:
四舍五入到最接近的int值的参数值。
回顾这一点问题在于1和1.5之间以及1.5和2之间的距离完全相同(0.5)。您现在可以通过以下几种不同的方式进行轮换:
- 总是朝向正无穷远
- 总是朝向负无穷远
- 总是接近零
- 总是远离零
- 。。。(见附件)
Math.round()
的数字
因此
Math.round(1.5)
将返回2,因此2更接近+∞ 与1相比。类似地,Math.round(-1.5)
将返回-1,因此-1更接近+∞ 与-2比较。最接近的整数,表示最接近的上整数-1
大于-1.5
@Tunki:难道不应该提及这一点吗?他们只是说“最近的整数”而不是“最近的上整数”,你可以在文档中找到这一点:这种舍入模式类似于Java中用于浮点和双精度算术的舍入策略。。否则,请参考Java规范的部分。最好包含来自javadoc的相关引用,而不仅仅是一个链接。我认为您也应该链接到。不仅仅是环绕模式。