我有这个函数,它只是一个总和和一个产品.对于某些值,对于不在某种意义上的其他人的工作不会返回正确的结果.
Codia function (r, c) {
return ((r + c) * (r + c + 1));
}
alert(Codia(1908229752,0));
Run Code Online (Sandbox Code Playgroud)
功能获得的结果: 3641340788326211000
我计算的结果: 3641340788326211256
你能告诉我我错在哪里吗?
JavaScript 的设计初衷并不是为了进行高精度计算。一旦浮点数和双精度数或大于Number.MAX_SAFE_INTEGER(即 9007199254740991)的数字,数字将开始失去准确性。以下是您的预期答案和最大安全整数的比较:
3,641,340,788,326,211,256 EXPECTED ANSWER
9,007,199,254,740,991 MAX_SAFE_INTEGER
Run Code Online (Sandbox Code Playgroud)
要解决此问题,可以使用专门用于进行大数算术运算的库,或者自己设计一种新算法。
这是一个使用BigNumber.js的示例,它返回正确答案 3641340788326211256:http://jsfiddle.net/DerekL/jj47touj/
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |