繁体   English   中英

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

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

我正在尝试四舍五入

6.079084800080882E-5

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

X = 0.0

这是我的代码

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

我不仅输入一个随机数(6.079084800080882E-5),而且这是事先进行一些计算后得出的数值。 这些计算无关紧要,因为这是我要舍入的数字。

Math.round()返回longint ,因此,如果将绝对值小于0.5的数字传递给它,则将得到0。0非常舍入。

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

正如已经指出的那样, 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM