Java十进制精度问题

Java十进制精度问题,java,Java,我有一个问题,我必须用长的小数点打印。 比如 1/3=0.33333333333(非常长) 当使用C时, 我们可以使用 printf(“%.30f”,a); 但是我不知道使用Java做什么您可以使用System.out.printf() 但是,请注意,这与在C中使用printf的目的相同:用于简单的调试/学习 当您需要工业级精度时,您需要Java中的,您也可以使用printf,System.out.printf(“…”,a,b,…)在C或Java中,IEEE754二进制浮点数的精度小数位数都不会

我有一个问题,我必须用长的小数点打印。 比如 1/3=0.33333333333(非常长) 当使用C时, 我们可以使用 printf(“%.30f”,a);
但是我不知道使用Java做什么

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

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


当您需要工业级精度时,您需要Java中的

,您也可以使用printf,System.out.printf(“…”,a,b,…)

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

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());
    }
}
最简单的解决方案:

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

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

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

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

“Java十进制精度问题”什么问题?你忘了问一个。(注意,“我不能做X”不是一个问题。)这个问题很糟糕。但这段代码是有效的,是四舍五入小数的最简单方法。