Java的数学。函数返回令人困惑的结果
我在学数学。函数,并具有以下代码:
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
第一个是正确的。我已经开始学数学了。在两条分配线上的pow函数。对于powerTest, 数学的参数。战俘们 双a=>;1.00583 双b=>;36.0
对于powerResult,它们是 双a=>;1.0058333333333333 双b=>;36.0
我知道这是机器执行浮点数学的一个问题,我只是不知道如何纠正它。在计算之前,我尝试了以下操作,但结果很差:
monthlyRate = Math.round(monthlyRate * 1000) / 1000;
# 1 楼答案
1 + monthlyRate
是1.0583...
,而不是1.00583
# 2 楼答案
显然,结果(1.23…和7.70)中如此大的差异与浮点数的编码方式无关,但比你在某个地方犯的错误更多 1+0.7/12=1.0583不同于1.00583;-)
# 3 楼答案
我认为部分问题在于
0.7/12 ~ 0.058333
和1.0583 > 1.00583
。我敢打赌,这是你的差异的真正来源,浮点调整与此无关# 4 楼答案
在Java上,您可以使用BigDecimal来执行货币操作,从而得到准确的数字:存储货币数字的Sun/Oracle recommended way
# 5 楼答案
你用的是整数除法
# 6 楼答案
表达式0.7d/12=0.0583,在powerTest表达式中使用的是0.00583