如何在Javascript中将长整型(字符串)转换为数字格式,而不使用javascript对其进行舍入?
var ThisInt = '9223372036854775808'
alert(ThisInt+'\r' +parseFloat(ThisInt).toString()+'\r' +parseInt(ThisInt).toString());在将其转换为字符串之前,我需要对其执行加法操作&如果可能的话,我不希望必须将其分成两部分。
发布于 2011-03-18 22:34:33
Javascript中所有的 Numbers都是64位的双精度IEE754浮点数。
因此,可以准确表示的最大正整数是2^53 - 1。剩余的位保留为指数。
您的数字恰好是1024倍,因此丢失了3位小数位的精度。它根本不能被更准确地表示。
在ES6中,你可以使用Number.isSafeInteger( # )来测试一个数字,看看它是否在安全范围内:
var ThisInt = '9223372036854775808';
console.log( Number.isSafeInteger( parseInt( ThisInt ) ) );
不过,还有一个BigInteger库,它应该能够提供帮助,避免您必须自己做所有的字符串和琐碎的工作。
EDIT 2018/12现在Chrome和NodeJS中有一个原生BigInt类(和新的文字语法)。
发布于 2011-03-18 22:36:53
借助递归的一些帮助,您可以直接递增您的十进制字符串,无论它表示一个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-18 22:45:20
你不能用标准的Javascript做到这一点。但是像往常一样,有一个漂亮的小库可以帮我们解决这个问题,在本例中是BigInt.js,它将允许您使用任意精度的整数。
https://stackoverflow.com/questions/5353388
复制相似问题