如何在Java中返回更具体的双精度值

如何在Java中返回更具体的双精度值,java,double,Java,Double,最近在学习Java编程时,我发现double类型只能返回有限的小数位数(当然我可以编写代码以返回更多的小数位数,例如键入%.20f,但它只会在某些小数位数后返回0)。没有办法返回更多小数位数的更具体的数字吗 下面是一个示例代码 public class DoubleCalculation { public static void main(String args[]) { int a = 1000; double b = 2.54643;

最近在学习Java编程时,我发现double类型只能返回有限的小数位数(当然我可以编写代码以返回更多的小数位数,例如键入%.20f,但它只会在某些小数位数后返回0)。没有办法返回更多小数位数的更具体的数字吗

下面是一个示例代码

public class DoubleCalculation {
    public static void main(String args[]) {
        int a = 1000;
        double b = 2.54643;
        System.out.printf("%.20f\n", a/b);
    }
}

它将返回392.7066520579792000000。

作为您可以使用的注释之一。请参见下面的小代码示例:

    int a = 1000;
    double b = 2.54643;
    System.out.printf("%.20f\n", a/b);

    BigDecimal a_2 = new BigDecimal(a);
    BigDecimal b_2 = new BigDecimal("2.54643");
    BigDecimal result = a_2.divide(b_2, 20, BigDecimal.ROUND_HALF_EVEN);
    System.out.println(result.toString());

使用BigDecimal可以指定精度(下面divide()中的50):


打印:392.70665205079792101098400505806167850677226214739851

您可以尝试使用
BigDecimal
class。。。为了精确操作,IEEE浮点数只能有16位精度。再好不过了。请改用DecimalFormat;)@达菲莫:52位精度。这通常不能精确地映射到小数位数。(例如,0.1d)。首先,您的方法不会返回任何内容。您只是在打印一个值。第二,小数点后非零位数并不能说明精度。在您的示例中,输入值
2.54643
只有六个十进制数字,而打印的数字超过结果的数字只是伪造了一个不存在的精度。我可以用随机数替换结果末尾的零,你不会注意到…
public static void main(String args[]) {
    BigDecimal a = new BigDecimal("1000");
    BigDecimal b = new BigDecimal("2.54643");
    System.out.println(a.divide(b, 50, BigDecimal.ROUND_HALF_DOWN).toString());
}