【问题标题】:PHP/server can't handle large numbers?PHP/服务器不能处理大数字?
【发布时间】:2013-06-05 08:41:54
【问题描述】:

我们使用支付 API 向我们发送客户令牌 ID,然后我们可以访问 API 上的个人数据。

客户令牌 ID 的示例是 9253691936959900,但 PHP 将其转换为 9.2536919369599E+15(例如)。显然 9.2536919369599E+15 是科学记数法,对我们没有用,我们用它来调用 API。

我们尝试了各种转换,例如 number_format(9.2536919369599E+15,16),但没有任何乐趣。

我们使用的是 32 位服务器和 PHP 5.4.15。

我们已经用尽了几乎所有的选项,即使是 API 的开发者也很难发现这个问题。他们确定客户令牌 ID 是作为字符串发送的,但出于某种原因,我们的系统将其解释为整数并将其转换为科学记数法。

任何帮助或建议将不胜感激。

谢谢一百万:)

【问题讨论】:

  • 您可以尝试在 php 收到值时强制它为字符串,即 $var = (string) $var2;
  • @Martin 它已经在 $var2 中转换为科学记数法,所以实际上您正在转换 $var2 的科学记数法表示,而不是大整数。
  • @bolbol 他不能在发送时而不是在接收时强制转换为字符串吗?还是此时仍注明?
  • @Martin 应该是解决方案。他应该在将其存储在变量中之前对其进行转换,否则您将丢失数字的 int 表示。

标签: php string api 64-bit 32-bit


【解决方案1】:

PHP 被限制为最大整数,即2^63-1 = 9223372036854775807(这是针对 64 位平台的。其他平台可能远小于此)。

任何大于 max 的数字都将被转换为浮点数。

你有几个选择:

  1. 使用字符串作为 ID。
  2. 使用小于2^63的数字
  3. 使用PHP GMP library

【讨论】:

    【解决方案2】:

    如果您的 API 提供程序以 JSON 格式返回密钥:

    $key = '{"key":999999999999999999999999999999999999999999999999999999}' ;
    $a = json_decode($key, true, 2 , JSON_BIGINT_AS_STRING);
    
    print $a['key'];
    

    上面打印的结果是:999999999999999999999999999999999999999999999999999999

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      相关资源
      最近更新 更多