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

この問題は、IEEE754バイナリ浮動小数点表現に関するものです。

問題の完全な説明については、このリンクを参照してください。

于 2013-03-20T13:19:44.277 に答える
1

試す

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

浮動小数点の精度が低すぎます

于 2013-03-20T13:23:42.730 に答える