示例输入:
double a = 31.3131313131313131313131313131313131131313131313131313131313131;
String value1 = String.format("N= %1$39.32f", a);
System.out.println(value1);
示例输出:N= 31.3131313131310000000000000...
为什么我的程序会在需要值时自动填充?我如何控制它,因为我希望调用这些值。
谢谢
示例输入:
double a = 31.3131313131313131313131313131313131131313131313131313131313131;
String value1 = String.format("N= %1$39.32f", a);
System.out.println(value1);
示例输出:N= 31.3131313131310000000000000...
为什么我的程序会在需要值时自动填充?我如何控制它,因为我希望调用这些值。
谢谢
这是双重精度的问题,看看这个:
public static void main(String[] args) {
double a = 31.3131313131313131313131313131313131131313131313131313131313131;
System.out.println(Double.toString(a));
}
输出:
31.31313131313131
javadouble
数据类型不能保持这么高的精度。改用 a BigDecimal
。
public static void main(String[] args) {
BigDecimal a = new BigDecimal("31.3131313131313131313131313131313131131313131313131313131313131");
System.out.println(a.toPlainString());
}
输出:
31.3131313131313131313131313131313131131313131313131313131313131
因为 adouble
只能表示 53 位精度,也就是大约 16 位十进制精度。因此,您的变量a
只需使用与您请求的值最接近的可表示值进行初始化。
如果您真的需要这种级别的精度,您应该考虑使用BigDecimal
.