功能误算

时间:2014-09-24 07:09:32

标签: javascript

我有这个函数,它只是一个总和和一个产品。 对于某些价值观而言,其他人的工作不是正确的结果。

Codia function (r, c) {
         return ((r + c) * (r + c + 1)); 
}
alert(Codia(1908229752,0));

通过函数获得的结果:3641340788326211000

我计算的结果:3641340788326211256

你能告诉我我错在哪里吗?

1 个答案:

答案 0 :(得分:4)

JavaScript并非旨在精确计算。一旦你有浮点数,双精度数或大于Number.MAX_SAFE_INTEGER的数字(即9007199254740991),数字将开始失去准确性。以下是您的预期答案与最大安全整数的比较:

3,641,340,788,326,211,256    EXPECTED ANSWER
    9,007,199,254,740,991    MAX_SAFE_INTEGER

要解决此问题,请使用专为大数字算术设计的库,或自行设计新算法。

以下是使用BigNumber.js返回正确答案3641340788326211256的示例:http://jsfiddle.net/DerekL/jj47touj/