为什么Java和Javascript将Math.round(-1.5)改为-1?

为什么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;如果为负值

今天我了解了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
;如果为负值,则表现为
舍入模式
向上。请注意,此舍入模式从不增加计算值。 这只是一个整数的问题,以及它在数字图表中的位置。从中可以看到
javadocs

public static int round(float a)
返回与参数最接近的整数,并向上取整

Special cases:
  • 如果参数为
    NaN
    ,则结果为0
  • 如果参数为负无穷大或任何小于或等于
    Integer.MIN_value
    的值,则结果等于
    Integer.MIN_value
    的值
  • 如果参数为正无穷大或任何大于或等于
    Integer.MAX_value
    的值,则结果等于
    Integer.MAX_value
    的值

    参数:

a-要舍入为整数的浮点值

Returns:
四舍五入到最接近的int值的参数值。
回顾这一点

问题在于1和1.5之间以及1.5和2之间的距离完全相同(0.5)。您现在可以通过以下几种不同的方式进行轮换:

  • 总是朝向正无穷远
  • 总是朝向负无穷远
  • 总是接近零
  • 总是远离零
  • 。。。(见附件)
显然,Java和JS都选择了第一个(这并不少见)

返回最接近x且等于a的数值 数学整数。如果两个整数值相等接近 对于x,则结果是更接近的数值+∞. 如果x 已为整数,结果为x

其中x是传递给
Math.round()
的数字


因此
Math.round(1.5)
将返回2,因此2更接近+∞ 与1相比。类似地,
Math.round(-1.5)
将返回-1,因此-1更接近+∞ 与-2比较。

最接近的整数,表示最接近的上整数
-1
大于
-1.5
@Tunki:难道不应该提及这一点吗?他们只是说“最近的整数”而不是“最近的上整数”,你可以在文档中找到这一点:这种舍入模式类似于Java中用于浮点和双精度算术的舍入策略。。否则,请参考Java规范的部分。最好包含来自javadoc的相关引用,而不仅仅是一个链接。我认为您也应该链接到。不仅仅是环绕模式。