这个表达式是PHP错误吗? 6227020800%10 = 4

时间:2015-09-29 19:47:28

标签: php xampp

写一些与阶乘连接的代码(计算阶乘数的总和)我注意到了13!模数10等于4.

function fact($n)
{
    if ($n == 0) return 1;
    return $n * fact($n-1);
}

function sum_num($n)
{
    $sum = 0;
    while ($n > 0)
    {
        $sum = $sum + ($n % 10);
        $n = floor($n/10);
    }
    return $sum;
}

$n = 13;
$buff = fact($n);
echo $n."! = ".$buff;
echo "<br>";
echo "Summ ".$n."! = ".sum_num($buff);

输出是:

13! = 6227020800

Summ 13! = 31

但是Summ应该是27.我开始搜索并发现第一步我得到的是4而不是0.

6227020800 % 10 = 4

我不明白为什么?

3 个答案:

答案 0 :(得分:2)

6227020800需要33位。最siginficant位被截断,你得到的数字1932053504(模数10是4)。 对于任意精度数学,使用bc*函数,例如bcmod(6227020800, 10)

答案 1 :(得分:0)

可能应该使用bcmath php模块代替此操作。

http://php.net/manual/en/book.bc.php

请注意此模块使用字符串作为输入。

答案 2 :(得分:0)

我很确定,您使用的是32位版本。这里的最大值是4.294.967.296。