22

JavaScriptで丸めずに長整数(文字列として)をJavascriptで数値形式に変換するにはどうすればよいですか?

var ThisInt = '9223372036854775808'
alert(ThisInt+'\r' +parseFloat(ThisInt).toString()+'\r' +parseInt(ThisInt).toString());

文字列としてキャストバックする前に加算を実行する必要があり、可能な限り2つスライスする必要はありません。

4

5 に答える 5

35

Javascriptのすべての 数値は、64ビットの「倍精度」IEE754浮動小数点です。

したがって、正確に表すことができる最大の正の整数は2^53-1です。残りのビットは指数用に予約されています。

あなたの数はそれより正確に1024倍大きいので、小数点以下3桁の精度が失われます。これ以上正確に表現することはできません。

ES6ではNumber.isSafeInteger( # )、数値をテストして、安全な範囲内にあるかどうかを確認できます。

var ThisInt = '9223372036854775808'; 
console.log( Number.isSafeInteger( parseInt( ThisInt ) ) );

ただし、 BigIntegerライブラリも利用できるので、すべての文字列やビットを自分でいじる必要がなくなります。

編集2018/12ChromeとNodeJSにネイティブBigIntクラス(および新しいリテラル構文)が追加されました。

于 2011-03-18T14:34:33.187 に答える
2

再帰の助けを少し借りれば、64ビット以上の数値を表す10進数の文字列を直接インクリメントできます...

/**
 * 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-18T14:36:53.097 に答える
1

標準のJavascriptではこれを行うことはできません。しかし、いつものように、私たちを助けるための気の利いた小さなライブラリがあります。この場合はBigInt.jsで、任意精度の整数を使用できます。

于 2011-03-18T14:45:19.767 に答える
-3

Numberクラスを使ってみましたか?
var num = new Number(parseFloat(ThisInt))

于 2011-03-18T14:31:03.363 に答える
-5

これには、Intまたはfloatの代わりにNumber(ThisInt)を使用してください。

于 2011-03-18T14:29:31.917 に答える