【问题标题】:Trouble with long int on 32bit platform [duplicate]32位平台上的long int问题[重复]
【发布时间】:2019-06-15 06:34:45
【问题描述】:

我正在使用 MailerLite API。

在 bash 中使用 curl 调用 api 我收到的用户 ID 为

“id”:413076286433501727

但是在php中

$groupsApi = (new \MailerLiteApi\MailerLite($apiKey))->groups();
foreach ($groupsApi->get() as $g) {
    $subscribers = $groupsApi->getSubscribers($g->id);
    foreach($subscribers as $sub) {
        var_dump($sub->id);
        var_dump('413076286433501727');
        $formated1 = sprintf('%d', $sub->id);
        $formated2 = sprintf('%.0f', $sub->id);
        var_dump($formated1);
        var_dump($formated2);
    }
}

PHP 版本 7.2.9 Windows NT WINDOWS 6.3 build 9600(Windows 8.1 专业版)i586

float(4.130762864335E+17)
string(18) "413076286433501727"
string(11) "-1509842432"
string(18) "413076286433501696"

PHP 版本 7.0.33 Linux panel.myhosting.name 3.10.0-714.10.2.lve1.5.17.1.el7.x86_64 #1 SMP Tue May 22 10:39:25 EDT 2018 x86_64强>

int(413076286433501727)
string(18) "413076286433501727"
string(18) "413076286433501727"
string(18) "413076286433501696"

在Win32平台上获取正确值的方法是什么?

UPD:问题在 cmets 讨论后被编辑

【问题讨论】:

  • 有些东西,转换很奇怪。试试%d 而不是%.0f,因为它是整数而不是浮点数。
  • 你如何从 bash 中得到这个???
  • @aynber sprintf('%d', $sub->id) 返回字符串(11) "-1509842432"
  • 您使用的是哪个 PHP 版本?你的 PHP 是 64 位版本的吗?
  • 你不是从 long int 而是从 float 转换的。

标签: php


【解决方案1】:

对我来说出乎意料的结果

$groupsApi = (new \MailerLiteApi\MailerLite($apiKey))->groups();
foreach ($groupsApi->get() as $g) {
    $subscribers = $groupsApi->getSubscribers($g->id);
    foreach($subscribers as $sub) {
        var_dump($sub->id);
        var_dump('413076286433501727');
        $formated1 = sprintf('%d', $sub->id);
        $formated2 = sprintf('%.0f', $sub->id);
        var_dump($formated1);
        var_dump($formated2);
    }
}

PHP 版本 7.2.9 Windows NT WINDOWS 6.3 build 9600(Windows 8.1 专业版)i586

float(4.130762864335E+17)
string(18) "413076286433501727"
string(11) "-1509842432"
string(18) "413076286433501696"

PHP 版本 7.0.33 Linux panel.myhosting.name 3.10.0-714.10.2.lve1.5.17.1.el7.x86_64 #1 SMP Tue May 22 10:39:25 EDT 2018 x86_64强>

int(413076286433501727)
string(18) "413076286433501727"
string(18) "413076286433501727"
string(18) "413076286433501696"

谢谢@Dharman,谢谢大家

【讨论】:

  • 它在 Windows 上溢出 32 位 int。在第一个示例中,试图变得聪明的 PHP 将值转换为浮点数而不是让它溢出。
猜你喜欢
  • 2011-03-05
  • 2013-08-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
相关资源
最近更新 更多