【问题标题】:PHP -- Convert string to bigintPHP -- 将字符串转换为大整数
【发布时间】:2012-01-23 15:23:44
【问题描述】:

我有以下字符串需要转换为整数或大整数。

$test="99999977706";

我试过了:

echo (int)$test;
echo (integer)$test;
echo intval($test);

但他们都回我 2147483647。

如何将上述字符串转换为数字或大整数?

非常感谢所有建议。

【问题讨论】:

  • 它需要是一个整数还是一个数字?因为(取决于平台)转换为 (float) 可能会起作用。
  • 我需要它是一个用于 mysql 比较目的的 int
  • 对我有用的一种解决方法是投射到float。
  • 你想用这个数字实现什么?通常的整数不能大于该值,PHP 中没有内置 BigInt

标签: php


【解决方案1】:

MySQL 不会知道其中的区别。只需将字符串输入到您的查询中,就好像它是一个数字,而无需先在 PHP 中进行类型转换。

例如:

$SQL = "SELECT * FROM table WHERE id = $test";

【讨论】:

  • 您好@Treffynnon,我必须如何在 SQL 之前预处理 bigint。假设我必须使用select ... where ... in ( some bigint values )?
  • @Cauliturtle 我不知道你在问什么,但我建议你在 StackOverflow 上问你自己的问题,因为 cmets 并不是真正为这种讨论而设计的。
  • 你能分享更多关于这个的细节吗?问题中没有与 MySQL 的连接,无论您想对给定的 `$SQL` 变量做什么,都不应使用它来运行查询
【解决方案2】:

工作解决方案:

<?php
   $str = "99999977706";
   $bigInt = gmp_init($str);
   $bigIntVal = gmp_intval($bigInt);
   echo $bigIntVal;
   ?>

它将返回:99999977706

【讨论】:

    【解决方案3】:

    在您的 sn-p $test 中已经是一个数字,更具体地说是一个浮点数。当您将 $test 用作数字或字符串时,PHP 会将其内容转换为正确的类型,因为该语言是松散类型的。

    【讨论】:

    • 对不起,我修改了。 $test 实际上是一个字符串,我需要它是一个用于比较目的的数字
    • 如果你把它转换成一个浮点数,你应该很高兴。 Mysql 不了解 php 类型,因此您应该将其转换为浮点数,然后相应地使用它。
    【解决方案4】:

    对于任意长度的整数,使用GMP。

    【讨论】:

    • ...可能是最好的解决方案,但应该指出必须安装 GMP 扩展,否则您的 gmp_init、gmp_intval 等调用将失败!
    【解决方案5】:

    您可以将字符串视为字符串而不进行转换。

    只需使用正则表达式即可只留下数字:

    $test = "99999977706";
    $test = preg_replace('/[^0-9]/', '', $test);
    

    【讨论】:

      【解决方案6】:

      它可以帮助你,

      $token=  sprintf("%.0f",$appdata['access_token'] );
      

      你可以参考这个link

      【讨论】:

      • “帮助”实现了什么? sprintf 永远不会返回 BigInt,而总是返回字符串
      猜你喜欢
      • 2012-04-06
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多