【发布时间】:2011-06-03 02:20:24
【问题描述】:
我在用 Java 执行计算时遇到了一点困难。这就是我想要做的-
((0.053800 * (500000/1000)) + 4) * 0.85
在我的 java 应用程序中,它返回 26.264999999999997,如果将其四舍五入到小数点后 2 位,则为 26.26。
但在 MS Excel 中,相同的公式返回 26.265000.. 因此四舍五入的结果是 26.27。
如果我的 Java 应用程序返回不正确的值,我可以做些什么来纠正它?
【问题讨论】:
-
主要区别可能在于浮点算术和真正的数学(就像手工完成一样)。
-
嗯?这一切都将按原样以双精度完成,因为 Java 语言规范要求没有“f”修饰符的浮点文字必须是
double,(除了500000/1000它将是整数除法(尽管它不会损失任何东西,因为该商没有余数))。 -
为什么要四舍五入到小数点后两位?如果四舍五入为 3,则它们四舍五入为相同的结果。如果四舍五入为 1,则它们的结果相同。
-
根据 IEEE 754 标准,实际上 Java 应用程序正在返回正确的值。不幸的是,IEEE 754 算术不同于实数算术,并且涉及对数字的舍入操作。如果您想精确计算实数,请使用 BigDecimal
-
@sean,我认为 QuantumMechanic 是在回复 pst
标签: java floating-point double