PHP与JS大数字计算差异

Jioby
  • 2.8k

同一个算法,在计算大数字时,PHP和JS计算的结果完全不同。
JS代码不是我写的,我想用PHP实现JS代码里的算法。奇怪的是,前3次计算是一致的,后面就不一样了。

代码&运行结果如下:


PHP代码:

$token = '123456789';
$t = 5381;
for ($n = 0, $r = strlen($token); $n < $r; ++$n) {
    $t = bcadd($t, bcadd(($t << 5), ord($token{$n})));
    echo $t, "\n";
}

$result = $t & 2147483647;

echo $result;

PHP已用bcadd函数进行大数字计算处理。

PHP输出:

177622
5861576
193432059
6383257999
210647514020
6951367962714
229395142769617
7570039711397417
249811310476114818
902675330

JS代码:

var e = '123456789';

var t = 5381;
for (var n = 0, r = e.length; n < r; ++n) {
    t += (t << 5) + e.charCodeAt(n);
    console.log(t);
}
var val = t & 2147483647;

console.log(val);

JS输出:

177622
5861576
193432059
2088290703
194116516
2110877786
939490257
938407465
902675330
902675330

我想知道PHP和JS在数字计算时,哪儿的差异导致最后计算的结果不同。
请问PHP该如何实现JS代码里那种算法。
谢谢诸路大神赐教~

回复
阅读 1.3k
1 个回答

代码乱七八糟的。

js 里没有大数字。超过 整数就是浮点数。浮点不精确。

php有bcmath,你要算就全用 bcmath 来算,中间有个整数与&,和位移<<,是怎么回事?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏