4

JavaScript で簡単な計算 (?) を実行しようとしています。

( 1023 * 2 ) + 76561197960265728;

既に PHP で同じ計算を行っていますが、結果は異なります。

JavaScript: 76561197960267780

PHP: 76561197960267774 (正しい結果)

次に、次のことを試しました: http://jsfiddle.net/YxBa4/

計算での高い数値に対する JavaScript の「制限」はありますか?

//編集:

ご回答ありがとうございます。今はBigNumberを使用しています。

私の完全な作業コード:

JSFiddleで

4

3 に答える 3

3

76561197960265730id が、javascript で許可されている最大数値サイズを超えています。Javascript には実際の整数はなく、Number常に 64 ビットの浮動小数点値であり、プラットフォームに依存しない型であることに注意してください。ただし、コンマと符号ビットの後の数値用に少なくとも 11 ビットが予約されているため、可能な最大の整数値はちょうど 2^53 です。

あなたの例では、次のようにするだけでこれを確認できます。

alert(76561197960265728);

計算がなくても、すでにエラーが発生します。(出力: '76561197960265730')

PHP では、最大整数値はシステムによって異なります。64 ビット システムを使用している場合、MAX 整数値は (2 * 1023) + 76561197960265728 よりも大きい 2^64 です。そのため、64 ビット システムでは、PHP で計算が成功しました。

PHP では、定数PHP_INT_MAXと `

于 2013-04-17T22:49:33.407 に答える
1

PHP の bcmath 拡張機能とその JS 変換を使用して、2 つの言語で一貫した結果を得ることができます。

bcadd('76561197960267774', '76561197960267774');
// 153122395920535548 

http://jsfiddle.net/zELmm/

http://phpjs.org/functions/bcadd/

http://php.net/manual/en/function.bcadd.php

于 2013-04-17T23:11:21.087 に答える