为什么 Java 和 Java 脚本 Math.round(-1.5) 到 -1?
Why does Java and Javascript Math.round(-1.5) to -1?
今天我弄清楚了 Java 和 Java 脚本的 Math.round 函数的这种行为。
它使 (1.40) 变为 1 以及 (-1.40) 变为 -1
它使 (1.60) 变为 2 以及 (-1.60) 变为 -2
现在,它使 (1.5) 变为 2。
但是,使 (-1.5) 变为 -1.
我也在 PhP 和 MySQL 的回合等效项中检查了此行为。
两者都给出了预期的结果。即 round(-1.5) 到 -2
甚至 Math.round definition 也说它应该四舍五入到最接近的整数。
想知道为什么会这样吗?
向负无穷大舍入的舍入模式。如果结果为正,则与 RoundingMode 的行为相同。DOWN
;如果为负,则表现与 RoundingMode
.UP 相同。请注意,这种舍入模式永远不会增加计算值。
这只是整数及其在数字图表中的位置的问题。从here可以看到javadocs
.
public static int round(float a)
Returns 最接近参数的整数,四舍五入。
Special cases:
- 如果参数是
NaN
,结果是0。
- 如果参数为负无穷大或任何小于或等于
Integer.MIN_VALUE
值的值,则结果等于 Integer.MIN_VALUE
的值。
如果参数为正无穷大或任何大于或等于Integer.MAX_VALUE
的值,则结果等于Integer.MAX_VALUE
.[=23的值=]
参数:
a - 要舍入为整数的浮点值。
Returns:
参数的值四舍五入为最接近的 int 值。
评论此 link too
问题是1和1.5之间的距离以及1.5和2之间的距离完全相同(0.5)。您现在可以通过几种不同的方式四舍五入:
- 总是朝向正无穷大
- 总是朝向负无穷大
- 总是趋向于零
- 永远远离零
- 朝向最近的奇数或偶数
- ...(参见 Wikipedia)
显然,Java 和 JS 都选择了第一个(这并不罕见),而 PHP 和 MySql 从零开始四舍五入。
Returns the Number value that is closest to x and is equal to a
mathematical integer. If two integer Number values are equally close
to x, then the result is the Number value that is closer to +∞. If x
is already an integer, the result is x.
其中 x 是传递给 Math.round()
的数字。
所以Math.round(1.5)
将return 2因此2与1相比更接近+∞。类似地Math.round(-1.5)
将return-1因此-1更接近+∞ 与-2 比较。
今天我弄清楚了 Java 和 Java 脚本的 Math.round 函数的这种行为。
它使 (1.40) 变为 1 以及 (-1.40) 变为 -1
它使 (1.60) 变为 2 以及 (-1.60) 变为 -2
现在,它使 (1.5) 变为 2。 但是,使 (-1.5) 变为 -1.
我也在 PhP 和 MySQL 的回合等效项中检查了此行为。 两者都给出了预期的结果。即 round(-1.5) 到 -2
甚至 Math.round definition 也说它应该四舍五入到最接近的整数。
想知道为什么会这样吗?
向负无穷大舍入的舍入模式。如果结果为正,则与 RoundingMode 的行为相同。DOWN
;如果为负,则表现与 RoundingMode
.UP 相同。请注意,这种舍入模式永远不会增加计算值。
这只是整数及其在数字图表中的位置的问题。从here可以看到javadocs
.
public static int round(float a)
Returns 最接近参数的整数,四舍五入。
Special cases:
- 如果参数是
NaN
,结果是0。 - 如果参数为负无穷大或任何小于或等于
Integer.MIN_VALUE
值的值,则结果等于Integer.MIN_VALUE
的值。 如果参数为正无穷大或任何大于或等于
Integer.MAX_VALUE
的值,则结果等于Integer.MAX_VALUE
.[=23的值=]参数:
a - 要舍入为整数的浮点值。
Returns:
参数的值四舍五入为最接近的 int 值。 评论此 link too
问题是1和1.5之间的距离以及1.5和2之间的距离完全相同(0.5)。您现在可以通过几种不同的方式四舍五入:
- 总是朝向正无穷大
- 总是朝向负无穷大
- 总是趋向于零
- 永远远离零
- 朝向最近的奇数或偶数
- ...(参见 Wikipedia)
显然,Java 和 JS 都选择了第一个(这并不罕见),而 PHP 和 MySql 从零开始四舍五入。
Returns the Number value that is closest to x and is equal to a mathematical integer. If two integer Number values are equally close to x, then the result is the Number value that is closer to +∞. If x is already an integer, the result is x.
其中 x 是传递给 Math.round()
的数字。
所以Math.round(1.5)
将return 2因此2与1相比更接近+∞。类似地Math.round(-1.5)
将return-1因此-1更接近+∞ 与-2 比较。