关于网友提出的“ PHP与JS大数字计算差异”问题疑问,本网通过在网上对“ PHP与JS大数字计算差异”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: PHP与JS大数字计算差异
描述:同一个算法,在计算大数字时,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:代码乱七八糟的。
js 里没有大数字。超过 整数就是浮点数。浮点不精确。
php有bcmath,你要算就全用 bcmath 来算,中间有个整数与&,和位移<<,是怎么回事?
以上介绍了“ PHP与JS大数字计算差异”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/4536106.html