Math.round(6.079084800080882E-5)= 0.0?

时间:2015-04-28 14:13:55

标签: java math

我试图绕过这个数字

6.079084800080882E-5

但是每当我运行应用程序时,结果就是这个

X = 0.0

这是我的代码

tmp = 6.079084800080882E-5;
x = (double)Math.round(tmp);

我不只是输入一个随机数(6.079084800080882E-5),而且这是一个由一些计算产生的nuber。这些计算并不重要,因为这是我试图回合的数字。

3 个答案:

答案 0 :(得分:14)

Math.round()会返回longint,因此如果您向其传递绝对值小于0.5的数字,那么您将获得0。很圆。

答案 1 :(得分:5)

这必须为0,因为6.079084800080882E-5 = 0.000060790084000。 E-5表示10 ^( - 5)。

答案 2 :(得分:1)

正如已经指出的那样,Math.round()作为标准循环工作,因此总是让你摆脱任何小数位并返回整数。

如果您需要舍入到特定的小数位数,这就是您需要的

import java.math.BigDecimal;
import java.math.RoundingMode;

public class RoundingExample {

    public static void main(String[] args) {
        double tmp = 6.079084800080882E-5;
        System.out.println(round(tmp, 3));
        System.out.println(round(tmp, 4));
        System.out.println(round(tmp, 5));
        System.out.println(round(tmp, 6));
        System.out.println(round(tmp, 7));
    }

    public static double round(double value, int places) {
        if (places < 0) {
            throw new IllegalArgumentException();
        }

        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(places, RoundingMode.HALF_UP);
        return bd.doubleValue();
    }
}

以上具有此输出的代码

0.0
1.0E-4
6.0E-5
6.1E-5
6.08E-5