鍍金池/ 問答/PHP  HTML/ PHP與JS大數(shù)字計算差異

PHP與JS大數(shù)字計算差異

同一個算法,在計算大數(shù)字時,PHP和JS計算的結果完全不同。
JS代碼不是我寫的,我想用PHP實現(xiàn)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函數(shù)進行大數(shù)字計算處理。

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在數(shù)字計算時,哪兒的差異導致最后計算的結果不同。
請問PHP該如何實現(xiàn)JS代碼里那種算法。
謝謝諸路大神賜教~

回答
編輯回答
夏木

代碼亂七八糟的。

js 里沒有大數(shù)字。超過 整數(shù)就是浮點數(shù)。浮點不精確。

php有bcmath,你要算就全用 bcmath 來算,中間有個整數(shù)與&,和位移<<,是怎么回事?

2017年6月16日 20:04