【问题标题】:PHP dealing with long integersPHP 处理长整数
【发布时间】:2013-04-02 07:48:38
【问题描述】:

我正在尝试从 facebook 获取数据。所以我尝试从他们的数组中获取user_id
问题是一些user_id 太长了,以至于当我尝试获取它时它会返回类似

1.00003247906E+14

而不是

100003247905698

我该如何解决这个问题?我需要实际的user_id

我尝试使用:

$targets = (string)($status->actor_id);

但它仍然返回相同的内容。

【问题讨论】:

  • 默认情况下,PHP 会将所有超出范围的整数转换为浮点数。使用 BC Math 处理大整数(但似乎有点压倒性)
  • 你需要它们作为整数吗?在大多数情况下,将它们作为字符串处理应该可以工作。
  • OP 已经尝试将其转换为字符串
  • 不知道 Facebook 但您首先需要将 ID 作为字符串检索。一旦它变成一个 PHP 浮点数,你不能保证你没有丢失精度。

标签: php facebook integer


【解决方案1】:

你可以试试$targets = sprintf('%0.0f',$status->actor_id)

【讨论】:

    【解决方案2】:

    快速解决这个问题:

    printf("%14.0f", 1.00003247906E+14);
    

    将打印

    100003247905698
    

    【讨论】:

    • 你怎么知道...06实际上代表...05698
    • @ÁlvaroG.Vicario 根据 OP,这应该是数字。
    • 这只是一个例子。如果事先知道 ID,他可以首先将其定义为字符串。 100003247905697, 100003247905698, 100003247905699... 它们都打印为 1.00003247906E+14。
    • 还有其他方法吗?喜欢将数据作为字符串获取?它仍然无法正常工作。 :(
    • 不用printf()打印出来,你可以用sprintf()取回字符串
    【解决方案3】:

    $targets = (string)($status->actor_id); 必须返回无效值,因为无效值必须已经在 $status 中

    您实际上是在直接打印检索到的 user_id(例如通过print_r($status))吗?

    【讨论】:

    • 啊k。我想假设未在此问题中发布的代码可能不是一个好主意
    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 2012-05-27
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多