我的代码片段非常简短:
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
有人可以告诉我背后的原因吗?
答案 0 :(得分:2)
该问题涉及IEEE 754二进制浮点表示。
有关问题的完整说明,请参阅this链接。
答案 1 :(得分:1)
试
double x = 12.345;
System.out.printf("%18.7f%n", x);
...
浮点精度太低