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 位浮点值且与平台无关的类型。但是最大可能的数值只是 2^53,因为至少为逗号和标志位之后的数字保留了 11 位。

在您的示例中,您只需执行以下操作即可看到这一点:

alert(76561197960265728);

即使没有任何计算,什么会给您带来错误。(输出:'76561197960265730')

在 php 中,最大整数值取决于您的系统。如果您使用的是 64 位系统,则 MAX 整数值为 2^64,大于 (2 * 1023) + 76561197960265728。这就是 PHP 在 64 位系统上计算成功的原因

在 PHP 中,您可以通过读取常量PHP_INT_MAX和 `来检测系统上的最大整数大小

于 2013-04-17T22:49:33.407 回答
3

在 Javascript 中,数字是 64 位浮点值。最大整数(大小)为 253,或 Math.pow(2,53),或 9007199254740992。取自:http ://notepad2.blogspot.ca/2012/04/maximum-integer-in-javascript.html

您超过了限制 1351079458714420。

整数的大小取决于平台,尽管通常值约为 20 亿的最大值(即 32 位有符号)。64 位平台的最大值通常约为 9E18。PHP 不支持无符号整数。自 PHP 4.4.0 和 PHP 5.0.5 起,可以使用常量 PHP_INT_SIZE 确定整数大小,使用常量 PHP_INT_MAX 确定最大值。取自http://php.net/manual/en/language.types.integer.php

所以基本上 PHP 允许您根据 PHP 配置为整数值提供更多容量。

于 2013-04-17T22:58:48.997 回答
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 回答