【发布时间】:2011-01-25 16:45:16
【问题描述】:
我正在使用 Math.pow() 函数,并且有以下代码:
double monthlyRate = (0.7d / 12);
int loanLength = 3;
double powerTest = Math.pow(1.00583, 36);
double powerResult = Math.pow((1 + monthlyRate),(loanLength * 12));
当它通过调试器运行时,值变为
powerTest => 1.2327785029794363
powerResult => 7.698552870922063
第一个是正确的。我已经在两条分配线上都进入了 Math.pow 函数。对于功率测试, Math.pow 的参数是 双a => 1.00583 双 b => 36.0
对于 powerResult,它们是 双a => 1.0058333333333333 双 b => 36.0
我知道这是机器执行浮点数学的方式的问题,我只是不确定如何纠正它。我在计算前尝试了以下操作,结果很差:
monthlyRate = Math.round(monthlyRate * 1000) / 1000;
【问题讨论】:
-
你对 (1+(0.7/12))^(3⋅12) 有什么期望?我在常规计算器中得到 7.6985528709220588862786。
-
在 Java 上,您应该使用 BigDecimal 来执行货币操作。看看我的回答。