Java 数学四舍五入(6.0790848000882E-5)=0.0?

Java 数学四舍五入(6.0790848000882E-5)=0.0?,java,math,Java,Math,我想把这个数字四舍五入 6.079084800080882E-5 但每当我运行应用程序时,结果就是这样 X = 0.0 这是我的密码 tmp = 6.079084800080882E-5; x = (double)Math.round(tmp); 我不仅仅是在输入一个随机数(6.0790848000882E-5),而是根据之前的一些计算生成的一个数字。这些计算应该不重要,因为这是我试图取整的数字。Math.round()返回一个long或int,因此如果你向它传递一个绝对值小于0.5的数字

我想把这个数字四舍五入

6.079084800080882E-5
但每当我运行应用程序时,结果就是这样

X = 0.0
这是我的密码

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

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

Math.round()
返回一个
long
int
,因此如果你向它传递一个绝对值小于0.5的数字,你将得到0。0是非常圆的。

这必须是0,因为6.0790848000882E-5=0.0000607900084000。
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();
    }
}

什么类型是
tmp
x
?您期望的是什么?它看起来是四舍五入的。您希望它四舍五入多少位?哈哈,没关系。只有我和数学,我们相处得不太好。ofc,这是0.00006079084。。。。
0.0
1.0E-4
6.0E-5
6.1E-5
6.08E-5