代码之家  ›  专栏  ›  技术社区  ›  Koraktor

php:将64位整数转换为字符串

  •  3
  • Koraktor  · 技术社区  · 15 年前

    我尝试在字符串变量中使用一个硬编码的64位整数。

    简单地说,我想做这样的事情:

    $i = 76561197961384956;
    $s = "i = $i";
    

    这会导致 s 存在:

    i = 76561197961384956
    

    这显然不适用于PHP将大整数转换为浮点,因此 S 是:

    i = 7.65611979614E+16
    

    当其他几种方法如铸造等失败时,我发现 number_format() 像这样使用:

    $s = "i = " . number_format($i, 0, '.', '');
    

    但这会导致 S 存在:

    i = 76561197961384960
    

    看起来像一个近似问题,但是如何解决这个问题?

    4 回复  |  直到 15 年前
        1
  •  3
  •   Chad Birch    15 年前

    您将失去分配的精度,而不是字符串转换的精度。如果这个变量的值实际上是硬编码的,并且您不能更改它,那么您就无能为力了。

    一条线:

    $i = 76561197961384956;
    

    总是会失去精确性。如果你需要保留整件东西,把它存储到一个字符串中,你就不能把它存储成这样的int并保留所有的数字。

        2
  •  2
  •   Greg    15 年前

    我想唯一的方法是使用 bcmath 功能。

    对于任意精度数学,PHP提供二进制计算器,它支持任何大小和精度的数字,用字符串表示。

    这是你的 $i 这是错误的,而不是字符串转换-PHP在内部使用32位int。

        3
  •  2
  •   deresh    15 年前

    目前,在PHP中进行大整数数学运算的唯一方法是使用BCMath或GMP扩展,将大数字作为字符串处理。在php6中计划64位整数。

    因此,当使用大整数将它们强制转换为字符串时,您将在分配(自动转换为浮点)时失去精度,然后使用字符串数学库的on进一步处理您的数字。

        4
  •  -1
  •   DV.    15 年前

    您试过使用php的intval()函数吗?

    推荐文章