如何在没有 javascript 舍入的情况下将长整数(作为字符串)转换为 Javascript 中的数字格式?
var ThisInt = '9223372036854775808'
alert(ThisInt+'\r' +parseFloat(ThisInt).toString()+'\r' +parseInt(ThisInt).toString());
在将其作为字符串转换回之前,我需要对其执行加法操作,并且如果可能的话,我宁愿不必将其切成两段。
如何在没有 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库,它应该能够提供帮助,并且避免你不得不自己做所有的字符串和小题大做。
编辑 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