JavaScriptで丸めずに、長整数(文字列として)をJavascriptで数値形式に変換するにはどうすればよいですか?
var ThisInt = '9223372036854775808'
alert(ThisInt+'\r' +parseFloat(ThisInt).toString()+'\r' +parseInt(ThisInt).toString());
文字列としてキャストする前に加算を実行する必要があり、可能な限り2つにスライスする必要はありません。
AllNumbers Javascriptでは64ビットの「倍精度」精度 IEE754 浮動小数点です。
したがって、正確に表すことができる最大の正の整数は2 ^ 53-1です。残りのビットは、指数用に予約されています。
あなたの数はそれより正確に1024倍大きいので、小数点以下3桁の精度が失われます。これ以上正確に表現することはできません。
ES6では、Number.isSafeInteger( # )
を使用して数値をテストし、安全な範囲内にあるかどうかを確認できます。
var ThisInt = '9223372036854775808';
console.log( Number.isSafeInteger( parseInt( ThisInt ) ) );
BigInteger ライブラリも利用可能ですが、これは役立つはずであり、すべての文字列やビットを自分でいじる必要はありません。
EDIT 2018/12ネイティブのBigInt
クラス(および新しいリテラル構文)がChrome =およびNodeJS。
再帰の助けを少し借りれば、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";
}
標準のJavascriptではこれを行うことはできません。しかし、いつものように、私たちを助けるための気の利いた小さなライブラリがあります。この場合は BigInt.js で、任意精度の整数を使用できます。