質問

なぜq==0以下のスクリプト?

<script>
  var start = 1234567890123456789;
  var end =   1234567890123456799;
  var q = end - start;
  alert(q);
</script>

うにすべき10.何が正しい道を引くこれら二つの番号?

役に立ちましたか?

解決

JavaScriptでの数字は、浮動小数点をしているため。彼らは、精度が制限されています。

JavaScriptは非常に長い番号を見ているときに

、それはそれは、64ビット浮動小数点として表現できる最も近い数値に丸めます。スクリプト、startendで同じ値に丸めます。

alert(1234567890123456789);   // says: 1234567890123456800
alert(1234567890123456799);   // says: 1234567890123456800

があり大きな整数上の正確な計算を行うには、組み込みの方法はませんが、あなたは、このような<のhref = "http://www-cs-students.stanford.edu/~tjw/jsbn/としてBigIntegerのライブラリを使用することができます"REL =" noreferrer ">この1 のます。

他のヒント

ジェイソンはすでに、なぜ掲載しました。 // WWW-:ソリューションについては、でhttpのJavascriptのBigIntライブラリーを得ることができますcs-students.stanford.edu/~tjw/jsbn/する

const subtract = (a, b) => [a, b].map(n => [...n].reverse()).reduce((a, b) => a.reduce((r, d, i) => {
    let s = d - (b[i] || 0)
    if (s < 0) {
        s += 10
        a[i + 1]--
    }
    return '' + s + r
}, '').replace(/^0+/, ''))

すべての異なるテストケースを処理するように

より良い
これらの事のために大きな整数のライブラリを使用します。

これはちょうどあなたが使用することができ、一般的な場合である....

で分かりやすく説明している JavaScriptの文書:

によるとECMAScript標準的な数種類: の倍精度の64ビットのバイナリ形式IEEE754値 (数字の間に -(253-1)253-1). ありません特定の型の整数です。

Wikipediaページ約 倍精度浮動小数点フォーマット 説明:

との間 252= 4,503,599,627,370,496253= 9,007,199,254,740,992 のrepresentable数の整数です。次の範囲から 253254, のものを乗じた 2, ので、representable数のものも。

(すべての整数値より小さい 252 れます。)

12345678901234567891234567890123456799 より大きい 260= 1152921504606846976.この大きさの約1%の整数値が格納されそうに倍精度浮動小数点形式です。

これら二つの保管することはできません。そのことは四捨五入で表示す 1234567890123456800.


JavaScriptの文書 もーについて教えてくれる整数型数値が格納されう:

[...]および始めとECMAScript6に行いますが、チェック数を倍精度の浮動小数点数が可能となります。 Number.isSafeInteger() など Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER.この範囲を超えて整数にJavaScriptは安全ではありませんもうとする倍精度の浮動小数点近似値です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top