Java中的Python样式round()

时间:2015-01-18 13:20:29

标签: java python rounding

我发现Python中的内置round()函数与Java的java.lang.Math.round()函数之间存在差异。

在Python中我们看到..

Python 2.7.6 (default, Sep  9 2014, 15:04:36) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> round(0.0)
0.0
>>> round(0.5)
1.0
>>> round(-0.5)
-1.0

并且在Java ..

System.out.println("a: " + Math.round(0.0));
System.out.println("b: " + Math.round(0.5));
System.out.println("c: " + Math.round(-0.5));
  

a:0
  b:1
  c:0

看起来Java总是四舍五入而Python 向下舍入以显示负数。

在Java中获取Python样式舍入行为的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

一种可能的方式:

public static long symmetricRound( double d ) {
    return d < 0 ? - Math.round( -d ) : Math.round( d );
}

如果数字为负数,则将其正值四舍五入,然后否定结果。如果它是正数或零,请按原样使用Math.round()

答案 1 :(得分:0)

你可以试试:

float a = -0.5;
signum(a)*round(abs(a));

答案 2 :(得分:0)

只需制作自己的圆形方法:

public static double round(double n) {
    if (n < 0) {
        return -1 * Math.round(-1 * n);
    }

    if (n >= 0) {
        return Math.round(n);
    }
}

答案 3 :(得分:0)

Python和Java中的round()函数的工作原理完全不同。

在Java中,我们使用正常的数学计算将值四舍五入

import java.lang.*;
public class HelloWorld{
        public static void main(String []args){
        System.out.println(Math.round(0.5));
        System.out.println(Math.round(1.5));
        System.out.println(Math.round(-0.5));
        System.out.println(Math.round(-1.5));
        System.out.println(Math.round(4.5));
        System.out.println(Math.round(3.5));
     }
}
$javac HelloWorld.java
$java -Xmx128M -Xms16M HelloWorld
1
2
0
-1
5
4

但是在Python中,对于奇数,答案会四舍五入为偶数,而当数字为偶数时,则不会四舍五入。

>>> round(0.5)
0
>>> round(1.5)
2
>>> round(-0.5)
0
>>> round(-1.5)
-2
>>> round(4.5)
4
>>> round(3.5)
4