22

如何在没有 javascript 舍入的情况下将长整数(作为字符串)转换为 Javascript 中的数字格式?

var ThisInt = '9223372036854775808'
alert(ThisInt+'\r' +parseFloat(ThisInt).toString()+'\r' +parseInt(ThisInt).toString());

在将其作为字符串转换回之前,我需要对其执行加法操作,并且如果可能的话,我宁愿不必将其切成两段。

4

5 回答 5

35

Javascript 中的所有 数字都是 64 位“双”精度IEE754浮点数。

因此可以准确表示的最大正整数是 2^53 - 1。其余位保留用于指数。

你的数字正好是这个数字的 1024 倍,所以会丢失 3 位小数的精度。它根本无法更准确地表示。

在 ES6 中,可以使用Number.isSafeInteger( # )测试一个数字来查看它是否在安全范围内:

var ThisInt = '9223372036854775808'; 
console.log( Number.isSafeInteger( parseInt( ThisInt ) ) );

还有一个可用的BigInteger库,它应该能够提供帮助,并且避免你不得不自己做所有的字符串和小题大做。

编辑 2018/12现在有一个原生BigInt类(和新的文字语法)登陆 Chrome 和 NodeJS。

于 2011-03-18T14:34:33.187 回答
2

在递归的帮助下,您可以直接增加十进制字符串,无论是表示 64 位数字还是更多...

/**
 * Increment a decimal by 1
 *
 * @param {String} n The decimal string
 * @return The incremented value
 */
function increment(n) {
    var lastChar = parseInt(n.charAt(n.length - 1)),
        firstPart = n.substr(0, n.length - 1);

    return lastChar < 9
        ? firstPart + (lastChar + 1)
        : firstPart
            ? increment(firstPart) + "0"
            : "10";
}
于 2011-03-18T14:36:53.097 回答
1

你不能用标准的 Javascript 做到这一点。但与往常一样,有一个漂亮的小库可以帮助我们,在本例中是 BigInt.js,它可以让您使用任意精度的整数。

于 2011-03-18T14:45:19.767 回答
-3

您是否尝试过使用 Number 类?
var num = new Number(parseFloat(ThisInt))

于 2011-03-18T14:31:03.363 回答
-5

只需为此使用Number(ThisInt)而不是 Int 或 float

于 2011-03-18T14:29:31.917 回答