Java小数精度问题

时间:2011-07-19 10:34:11

标签: java

我有一个问题,我必须打印长小数位。 如 1/3 = 0.33333333333333333333333333333333333333(非常长) 使用C时, 我们可以用 printf(“%。30f”,a); 但我不知道如何使用Java

5 个答案:

答案 0 :(得分:9)

在C或Java中,您不会在IEEE754二进制浮点数中获得那么多的小数位精度。您最好的选择是使用BigDecimal并以特定的精度执行算术。例如:

import java.math.*;

public class Test {
    public static void main(String[] args) throws Exception {
        MathContext context = new MathContext(30);
        BigDecimal result = BigDecimal.ONE.divide(new BigDecimal(3), context);
        System.out.println(result.toPlainString());
    }
}

答案 1 :(得分:2)

您可以使用System.out.printf(doc

请注意,这只是出于与在C中使用printf相同的目的:用于简单的调试/学习。

当您需要工业强度精度时,需要BigDecimal

答案 2 :(得分:1)

在Java中,你也可以使用printf,System.out.printf(“...”,a,b,...)

答案 3 :(得分:0)

最简单的解决方案:

 double roundTwoDecimals(double d) {
            DecimalFormat twoDForm = new DecimalFormat("#.##");
        return Double.valueOf(twoDForm.format(d));
}

答案 4 :(得分:0)

Java double和C / C ++ double具有相同的精度。如果要打印30个小数位,可以使用

double d = 1.0/3;
System.out.println("%.30f", d);

但是,double没有30位精度(在任何语言中),并且您得到舍入错误。如果在Java中需要30位小数的精度,则需要使用BigDecimal。

相关问题