今天我发现了Java和Javascript的Math.round函数的这种行为。
使(1.40)为1以及(-1.40)为-1
它使(1.60)到2以及(-1.60)到-2
现在,它使(1.5)变为2。 但是,将(-1.5)设为-1。
我在PhP和MySQL的圆形等效中检查了这种行为。 两者都得到了预期的结果。即圆(-1.5)至-2
即使Math.round definition说它应该将它四舍五入到最接近的整数。
想知道为什么会这样?
答案 0 :(得分:2)
舍入模式向负无穷大舍入。如果结果为正,则表现为RoundingMode。DOWN
;如果是否定的,则表现为RoundingMode
。UP。请注意,此舍入模式永远不会增加计算值。
这只是整数的问题,它与数字图表的位置有关。从here,您可以看到javadocs
。
public static int round(float a)
返回与参数最接近的int,并将关系向上舍入。
Special cases:
NaN
,则结果为0. Integer.MIN_VALUE
的值,则结果等于Integer.MIN_VALUE
的值。如果参数为正无穷大或任何大于或等于Integer.MAX_VALUE
的值,则结果等于Integer.MAX_VALUE
的值。
参数:
a - 要舍入为整数的浮点值。
Returns:
参数的值四舍五入到最接近的int值。 查看此link too
答案 1 :(得分:1)
返回最接近x并且等于a的Number值 数学整数。如果两个整数Number值相等 到x,那么结果是更接近+∞的Number值。如果是x 已经是整数,结果是x。
其中x是传递给Math.round()
的数字。
因此Math.round(1.5)
将返回2,因此2与...相比更接近+∞。同样Math.round(-1.5)
将返回-1,因此-1与-2相比更接近+∞。
答案 2 :(得分:0)
问题是1和1.5以及1.5和2之间的距离完全相同(0.5)。现在有几种不同的方法可以解决:
显然,Java和JS都选择了第一个(这并不罕见)。