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