繁体   English   中英

Javascript解析int64

[英]Javascript parsing int64

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

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

我需要在将它作为一个字符串强制转换之前对其执行添加,并且如果可能的话,我不希望将它切成两半。

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

因此可以精确表示的最大正整数是2 ^ 53-1。剩余的比特是为指数保留的。

您的数字正好是此数字的1024倍,因此丢失3个十进制数字的精度。 它根本无法更准确地表示。

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

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

还有一个BigInteger库可以提供帮助,但是,避免你必须自己做所有的字符串和位。

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

通过递归的一点帮助,您可以直接递增十进制字符串,无论它代表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";
}

你不能用标准的Javascript做到这一点。 但是和往常一样,有一个漂亮的小库来帮助我们,在这种情况下BigInt.js ,它将允许你使用任意精度的整数。

你尝试过使用Number类吗?
var num = new Number(parseFloat(ThisInt))

只需使用Number(ThisInt)代替Int或float

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM