您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> PHP >> PHP与JS大数字计算差异

PHP与JS大数字计算差异

来源:网络整理     时间:2018/1/27 1:06:16     关键词:

关于网友提出的“ 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

相关图片

相关文章