math.round(6.079084800080882e-5)=0.0?

y1aodyip  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(344)

我想把这个数字四舍五入

6.079084800080882E-5

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

X = 0.0

这是我的密码

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

我不仅仅是输入一个随机数(6.0790848000882E-5),而是一个由之前的一些计算生成的数字。这些计算应该不重要,因为这是我试图四舍五入的数字。

bweufnob

bweufnob1#

Math.round() 返回 long 或者一个 int ,所以如果你给它传递一个绝对值小于0.5的数字,你会得到0。0是非常圆的。

mbzjlibv

mbzjlibv2#

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

ac1kyiln

ac1kyiln3#

如前所述, 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

相关问题