我想做一些简单的数学(?)在JavaScript:
( 1023 * 2 ) + 76561197960265728;
我已经在PHP中做了相同的计算,但结果是不同的:
JavaScript: 76561197960267780
PHP: 76561197960267774(右结果)
然后我尝试了以下操作:http://jsfiddle.net/YxBa4/
是否有一个"限制"在JavaScript的高数字计算?
//编辑:
谢谢你的回答,我现在用大一号。
完整的工作代码:
在JSFiddle在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_INT_MAX来确定,从PHP 4.4.0和PHP 5.0.5开始。摘自http://php.net/manual/en/language.types.integer.php
根据PHP配置,PHP为整型值提供了更大的容量
值76561197960265730
id大于javascript中允许的最大数字大小。请注意,Javascript中没有真正的整数,只有Number
类型,它始终是64位浮点值和平台无关。但是最大可能的整数值仅为2^53,因为至少有11位保留给逗号和标识位之后的数字。
在您的示例中,您可以通过简单地执行:
alert(76561197960265728);
什么会给你一个错误,即使没有任何计算。(输出:' 76561197960265730 ')
在php中,最大整数值取决于您的系统。如果您在64位系统上,最大整数值是2^64,它大于(2 * 1023)+ 76561197960265728。这就是为什么在PHP中计算成功的原因——在64位系统上
在PHP中,您可以通过读取常量PHP_INT_MAX
和'
您可以使用PHP的bcmath扩展及其JS转换来获得跨两种语言的一致结果:
bcadd('76561197960267774', '76561197960267774');
// 153122395920535548
http://jsfiddle.net/zELmm/http://phpjs.org/functions/bcadd/http://php.net/manual/en/function.bcadd.php 更新:-
BigInt是作为JavaScript的原生特性添加的。
但是仍然有一些精度误差在四舍五入,一个变通比较
在JavaScript中比较BigInt和Number的完整代码
根据这里的初始问题:-
PHP: 76561197960267774(右结果)
var num = BigInt( 1023 * 2 ) + 76561197960265728n;
console.log(num.toString());
/*
num.toString() removes n at the end of digit.
Output: 76561197960267774
*/
其中bigint,通过在整数字面值后面附加n或调用bigint()构造函数创建。
使用BigInt后:-
JavaScript: 76561197960267774(正确的结果)