System.out.printf()用于float数据类型

时间:2013-03-20 13:15:50

标签: java printf

我的代码片段非常简短:

public class FormatFloat {
    public static void main(String[] args) {
        float x = 12.345f;
        System.out.printf("%18.7f%s", x, "\n");
        System.out.printf("%18.8f%s", x, "\n");
        System.out.printf("%18.10f%s", x, "\n");
        System.out.printf("%18.15f%s", x, "\n");
    }    
}

我认为输出是

        12.3450000
       12.34500000
     12.3450000000
12.345000000000000

但我得到了

        12.3450003
       12.34500027
     12.3450002670
12.345000267028809

有人可以告诉我背后的原因吗?

2 个答案:

答案 0 :(得分:2)

该问题涉及IEEE 754二进制浮点表示。

有关问题的完整说明,请参阅this链接。

答案 1 :(得分:1)

double x = 12.345;
System.out.printf("%18.7f%n", x);
...

浮点精度太低