JavaScript VS PHP:相同的计算返回不同的结果

时间:2013-04-17 22:32:22

标签: php javascript

我正在尝试用JavaScript做一些简单的数学运算(?):

( 1023 * 2 ) + 76561197960265728;

我已经在PHP中进行了相同的计算,但结果不同:

JavaScript: 76561197960267780

PHP: 76561197960267774 (正确的结果)

然后我尝试了以下内容: http://jsfiddle.net/YxBa4/

JavaScript中是否存在计算中高数字的“限制”?

//编辑:

感谢您的回答,我现在使用BigNumber

我现在的完整工作代码:

on JSFiddle

3 个答案:

答案 0 :(得分:3)

76561197960265730 id大于javascript中允许的最大数量大小。请注意,Javascript中没有真正的整数只是Number类型,它始终是64位浮点值并且与平台无关。但是最大可能的整数值仅为2 ^ 53,因为至少为逗号和标志位后面的数字保留了11位。

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

alert(76561197960265728);

即使没有任何计算,什么会给你一个错误。 (输出:' 76561197960265730')

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

在PHP中,您可以通过读取常量PHP_INT_MAX和“

来检测系统上的最大整数大小

答案 1 :(得分: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_INT_SIZE确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX。取自http://php.net/manual/en/language.types.integer.php

因此,基本上PHP允许您根据PHP配置为Integer值提供更多容量。

答案 2 :(得分:1)

你可以使用PHP的bcmath扩展和它的JS转换来获得两种语言的一致结果:

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

http://jsfiddle.net/zELmm/

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

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