【发布时间】:2026-01-13 09:10:02
【问题描述】:
我正在用 Java 构建一个 Web 应用程序,它会进行数学运算并向用户显示步骤。在使用小数进行基本算术运算时,我经常会在准确的输出中弄得一团糟。
这是我的问题:
double a = 0.15;
double b = 0.01;
System.out.println(a - b);
// outputs 0.13999999999999999
float a = 0.15;
float b = 0.01;
System.out.println(a - b);
// outputs 0.14
float a = 0.16f;
float b = 0.01f;
System.out.println(a - b);
// outputs 0.14999999
double a = 0.16;
double b = 0.01;
System.out.println(a - b);
// outputs 0.15
对于complete 的准确性,两者都不可靠。有没有更精确的数字类,还是我应该将值四舍五入?
【问题讨论】:
-
对于 1/3 也不会很好。
-
您也可以使用 strictfp 代替 BigDecimal。解释于*.com/questions/517915/…
-
strictfp 仍然是浮点数,所以这无济于事(它只会确保他的所有用户都得到完全相同的混乱结果)。
-
您能否使用 Java 7 中的链接并提供如何在 BigDecimal 中完成此操作的示例?
标签: java math floating-accuracy