2013-03-20 90 views
2

我有一个字符串值'9223372036854775807'。我使用Number()函数在JavaScript中使用下面的代码防止JavaScript数字四舍五入大数字

var numericVal = Number(' 9223372036854775807 '); 

将其转换为一个数值,当我在numericVal检查值,它是9223372036854776000.我怎样才能为代表的字符串等值数?

+0

http://stackoverflow.com/questions/1725341/javascript-large-number-library – 2013-03-20 16:38:07

+0

我的值应为-9223372036854775808和9223372036854775807因此,我用下面的代码 范围之间'如果(valueToCompare.startsWith(' - ')){\t valueToCompare = valueToCompare.substring(1); \t isValid =!(valueToCompare> 9223372036854775808); \t }其他{\t isValid =!(valueToCompare> 9223372036854775807); \t }' – 2013-03-23 13:19:11

+0

可能重复的[如何在javascript中处理大数](http://stackoverflow.com/questions/4288821/how-to-deal-with-big-numbers-in-javascript) – Bergi 2013-08-26 20:55:28

回答

3

JavaScript编号为Double Precision Floats;可以精确存储的最大整数是2^53(9007199254740992)。 如果你真的需要它在一个数字,你有一些有趣的数学在你面前,或者你可以使用库如big.js

+0

我是相当困惑,因为输出的数字大于我给出的数字。如果它可以存储更大的价值,它不能存储更小的价值? – 2013-03-20 16:42:59

+0

对不起,我错误粘贴 - 2^53是9007199254740992.它可以存储更高的值,只是不精确。 – 2013-03-20 16:44:56

+0

但9223372036854776000大于9007199254740992的权利。这个值如何被存储? – 2013-03-20 16:49:17

1

这似乎是你的数字大于2^53,在javascript中最大的整数可以不失真地表示(见this question)。

如果你真的需要操作大的数字,你可以使用特殊的图书馆像这样的:https://github.com/peterolson/BigInteger.js

+0

我只是想比较这个数字与另一个。这可能没有任何特殊的图书馆? – 2013-03-20 16:57:26

2

您可以比较表示大整数作为strings-

的整数更长的字符串是大串,否则按顺序比较字符。

可以排序整数字符串数组

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 

只要确保你比较字符串

(如果你用“ - ”负值,一个“大”的字符串值

顺便说一句,你那种大小数通过小数点分割和对比整数部分。如果整数长度相同并且相等,则查看小数部分。