7

文字列値'9223372036854775807'があります。JavaScriptでNumber()関数を使用して、次のコードを使用して数値に変換します

var numericVal = Number(' 9223372036854775807 ');

nudeValの値を確認すると、9223372036854776000になります。数値を表す文字列と同等の値を取得するにはどうすればよいですか?

4

4 に答える 4

6

JavaScriptの数値は倍精度浮動小数点数です。正確に格納できる最大の整数は2^53(9007199254740992)です。あなたが実際にそれを数で必要とするならば、あなたはあなたの前にいくつかの楽しい数学を持っています、あるいはあなたはbig.jsのようなライブラリを使うことができます

于 2013-03-20T16:36:56.303 に答える
3

大きな整数を表す文字列を文字列として比較できます-

整数の長い文字列は大きくなります。それ以外の場合は、文字を順番に比較します。

整数文字列の配列を並べ替えることができます

function compareBigInts(a, b){
    if(a.length== b.length) return a>b? 1:-1;
    return a.length-b.length;
}

または、2つの数字列のうち大きい方を返します

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

文字列を比較していることを確認してください。

(「-」マイナス値を使用する場合、「大きい」文字列値は少なくなります)

ちなみに、小数点を割って整数部分を比較することで、大きな小数を並べ替えます。整数が同じ長さで等しい場合は、小数点以下の部分を見てください。

于 2013-03-20T18:30:22.193 に答える
1

あなたの数は2^53より大きいようです。これは、精度を失うことなく表現できるjavascriptの最大の整数です(この質問を参照)。

本当に大きな数を操作する必要がある場合は、次のような特別なライブラリを使用できます:https ://github.com/peterolson/BigInteger.js

于 2013-03-20T16:40:42.657 に答える
0

Number( '9223372036854775807')が9223372036854776000を生成する理由の問題は、JavaScriptの精度が制限されており(最大16桁)、19桁が必要なことです。

解決策の1つは、Javaスクリプトのビッグナンバーライブラリを使用することです。

// 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');
}
于 2018-07-24T07:25:08.480 に答える