我有一个问题,需要将数字以长小数位数打印出来。 例如: 1/3 = 0.33333333333333333333333333333333333333 (非常长) 在使用C语言时, 我们可以使用 printf("%.30f", a); 但是我不知道在Java中该怎么做。
我有一个问题,需要将数字以长小数位数打印出来。 例如: 1/3 = 0.33333333333333333333333333333333333333 (非常长) 在使用C语言时, 我们可以使用 printf("%.30f", a); 但是我不知道在Java中该怎么做。
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());
}
}
最简单的解决方案:
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);
然而,双精度浮点数在任何语言中都没有30位有效数字,所以会出现舍入误差。如果你需要在Java中保留30个小数位的精度,你需要使用BigDecimal。