我有一个字符串值'9223372036854775807'。我在 JavaScript 中使用 Number() 函数使用以下代码将其转换为数字值
var numericVal = Number(' 9223372036854775807 ');
当我检查 numericVal 中的值时,它是 9223372036854776000。如何获得表示数字的字符串的等效值?
我有一个字符串值'9223372036854775807'。我在 JavaScript 中使用 Number() 函数使用以下代码将其转换为数字值
var numericVal = Number(' 9223372036854775807 ');
当我检查 numericVal 中的值时,它是 9223372036854776000。如何获得表示数字的字符串的等效值?
JavaScript 数字是双精度浮点数;可以精确存储的最大整数是 2^53 (9007199254740992)。如果你真的需要它,你有一些有趣的数学在你面前,或者你可以使用诸如big.js 之类的库
您可以将表示大整数的字符串比较为字符串-
较长的整数字符串较大,否则按顺序比较字符。
您可以对整数字符串数组进行排序
function compareBigInts(a, b){
if(a.length== b.length) return a>b? 1:-1;
return a.length-b.length;
}
或返回两个数字字符串中较大的一个
function getBiggestBigInts(a, b){
if(a.length== b.length) return a>b? a:b;
return a.length>b.length? a: b;
}
//例子
var n1= '9223372036854775807', n2= '9223372056854775807',
n3= '9223',n2= '9223372056854775817',n4= '9223372056854775';
getBiggestBigInts(n1,n2) ;>> 9223372056854775807
[n1,n2,n3,n4].sort(compareBigInts) ;>>
9223
9223372056854775
9223372036854775807
9223372056854775817
只要确保您正在比较字符串。
(如果使用“-”减值,“更大”的字符串值会更少)
顺便说一句,您可以通过拆分小数点并比较整数部分来对大小数进行排序。如果整数长度相同且相等,请查看小数部分。
看来您的数字大于 2^53,这是 javascript 中最大的整数,可以在不丢失精度的情况下表示(参见这个问题)。
如果你真的需要操作大数,你可以使用像这样的特殊库:https ://github.com/peterolson/BigInteger.js
Number('9223372036854775807') 产生 9223372036854776000 的问题在于 JavaScript 的精度有限(最多 16 位),您需要 19 位。
一种解决方案可能是使用 java script big-numbers库:
// Initializa library:
var bn = new BigNumbers();
// Create numbers to compare:
var baseNumber = bn.of('9223372036854775807');
var toCompareNumber = bn.of('9223372036854775808');
// Compare:
if(baseNumber.lessOrEquals(toCompareNumber)) {
console.log('This should be logged');
} else {
console.log('This should NOT be logged');
}