数字12.000001不能完全以实际格式表示。存储的值为12.0000009999999992515995472786016762256622314453125。问题是如何用语言准确地打印出来呢?
我尝试了这些方法:
double a = 12.000001;
System.out.println("- " + a);
System.out.println(String.format("%%f %f", a));
System.out.println(String.format("%%.20f %.20f", a));
System.out.println(String.format("%%.60f %.60f", a));
System.out.println(String.format("%%g %g", a));
System.out.println(String.format("%%.20g %.20g", a));
System.out.println(String.format("%%.60g %.60g", a));
事实证明,准确打印是不可能的:
- 12.000001 %f 12.000001 %.20f 12.00000100000000000000 %.60f 12.000001000000000000000000000000000000000000000000000000000000 %g 12.0000 %.20g 12.000001000000000000 %.60g 12.0000010000000000000000000000000000000000000000000000000000
PS为什么需要这个?例如用于调试。或者编写代码来说明问题中的问题当比较两个实数时,我们得到不同的结果。