大数字基数转换和最大限制

时间:2015-10-30 09:11:12

标签: php types integer

我有这个问题:

        // 7788778877887786660462040644602088666448 (10) = 9mwjmtyko1mpect1brz2exoncc (36)

    $a = 7788778877887786660462040644602088666450 - 2;
    echo $a."<br>"; // prints 7.7887788778878E+39
    $b = "9mwjmtyko1mpect1brz2exoncc";
    echo base_convert($b, 36, 10)."<br>"; //prints 7788778877887786660462040644602088666448

我知道为什么$a打印到7.7887788778878E+39,这是因为$a的值超过了整数限制。
但是,当我将7.7887788778878E+39转换为十进制时,为什么它不是9mwjmtyko1mpect1brz2exoncc?它只打印确切的值(7788778877887786660462040644602088666448
如何将$a打印到确切的值(忽略错误)? 7788778877887786660462040644602088666448是另一种大于long / unsigned-long的数据类型吗?

1 个答案:

答案 0 :(得分:1)

查看此页面上的一些答案: How to keep long int during PHP string conversion? 我认为你不能这样做,因为大值存储为浮点数。

建议使用像BC MathGMP这样的库,但我认为默认情况下这些库没有启用。