1

我在这里有一个非常短的代码片段:

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

谁能告诉我背后的原因?

4

2 回答 2

2

该问题与 IEEE 754 二进制浮点表示有关。

有关您的问题的完整描述,请参阅链接。

于 2013-03-20T13:19:44.277 回答
1

尝试

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

浮点精度太低

于 2013-03-20T13:23:42.730 回答