string.format自动填充我的双倍如何让它停止

时间:2013-03-10 13:06:01

标签: java double string-formatting padding

示例输入:

double a = 31.3131313131313131313131313131313131131313131313131313131313131;
String value1 = String.format("N= %1$39.32f", a);
System.out.println(value1);

示例输出:     N = 31.3131313131310000000000000 ......

为什么我的程序会在有值要求时自动填充?我如何控制它,因为我希望调用这些值。

谢谢

2 个答案:

答案 0 :(得分:2)

这是双精度问题,请看一下:

public static void main(String[] args) {
    double a = 31.3131313131313131313131313131313131131313131313131313131313131;
    System.out.println(Double.toString(a));
}

输出:

31.31313131313131

java double数据类型无法保持这么高的精度。请改用BigDecimal

public static void main(String[] args) {
    BigDecimal a = new BigDecimal("31.3131313131313131313131313131313131131313131313131313131313131");
    System.out.println(a.toPlainString());
}

输出:

31.3131313131313131313131313131313131131313131313131313131313131

答案 1 :(得分:0)

因为double只能表示53位的精度,大约是精度的16位十进制数。因此,您的变量a只是使用与您请求的值最接近的可表示值进行初始化。

如果您确实需要此级别的精确度,则应考虑使用BigDecimal