为什么是q==0下剧本吗?

<script>
  var start = 1234567890123456789;
  var end =   1234567890123456799;
  var q = end - start;
  alert(q);
</script>

我会想想的结果应该是10.什么是正确的方法来减去这两个数字?

有帮助吗?

解决方案

由于在JavaScript数字浮点。它们具有有限的精确度。

当的JavaScript看到一个很长的数目,它便将它可以表示为一个64位浮点最接近的数字。在脚本中,startend获得四舍五入到相同的值。

alert(1234567890123456789);   // says: 1234567890123456800
alert(1234567890123456799);   // says: 1234567890123456800

有没有内置的方式来做大整数精确运算,但你可以使用一个BigInteger库如的这一项

其他提示

杰森已经张贴为什么。 // WWW-:解决的办法,你可以在 HTTP GET一个Javascript库BigInt有cs-students.stanford.edu/~tjw/jsbn/

const subtract = (a, b) => [a, b].map(n => [...n].reverse()).reduce((a, b) => a.reduce((r, d, i) => {
    let s = d - (b[i] || 0)
    if (s < 0) {
        s += 10
        a[i + 1]--
    }
    return '' + s + r
}, '').replace(/^0+/, ''))

点击更好地利用大整数库这些东西,以便处理所有不同的测试用例。

这是只为一个一般情况下,你可以使用...

它解释的 JavaScript文件:

根据写标准,只有一个号码类型: 双精64位的二元格式IEEE754值 (之间的数字 -(253-1)253-1). 没有具体类型的整数。

维基百科的网页有关 双精度浮点格式 解释说:

之间 252= 4,503,599,627,370,496253= 9,007,199,254,740,992 这可表示的数字是准确的整数。对于下一步的范围,从 253254, 一切都是乘 2, ,因此可表示的数字是的甚至是那些等。

(所有整数比较小 252 表示完全一致。)

12345678901234567891234567890123456799260= 1152921504606846976.在这个幅度是只有约1%的整的数字存储完全使用双精度浮点的格式。

这两个不能被存储。他们都被四舍五入到 1234567890123456800.


JavaScript文件 也解释了如何告诉我们,如果一个整数被保存究竟:

[...]开始写6,你也是能够检查,如果一些是在双精度浮点数范围内使用 Number.isSafeInteger() 以及 Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER.超出这个范围内,整数在JavaScript不再安全,将是一个双精度浮点的近似值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top