[英]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.