php:int()函数等效于bigint类型? (int()将字符串剪切为2147483647)

时间:2011-11-12 00:03:00

标签: php function integer int biginteger

php:bigint类型的等效int()函数是什么? (int()将大数字削减到2147483647)?

示例:

$bigint1="12312342306A_C243";
$bigint1=(int)$bigint1;//2147483647

但我希望它是12312342306。

7 个答案:

答案 0 :(得分:8)

我知道已经老了并且已经回答了,但是为了将来参考这个人:

<强>已更新

整数的大小取决于平台,尽管最大值约为20亿是通常的值(32位有符号)。 64位平台的最大值通常约为9E18,除了PHP之前的Windows,它总是32位。 PHP不支持无符号整数。整数大小可以使用常量PHP_INT_SIZE确定,最大值使用自PHP 5.0.5起的常量PHP_INT_MAX,使用自PHP 7.0.0起使用常量PHP_INT_MIN的最小值。

Source

答案 1 :(得分:6)

没有内置类型来执行此类演员,因为您可以看到here(来自官方文档)。 无论如何,您可以使用GMP library来管理这个长整数。

答案 2 :(得分:2)

这可能不是您想要的那种答案,但是,为什么不切换到64位机器呢?

在我的(64位Fedora)PC上,$ bigint1的值为12312342306。

答案 3 :(得分:2)

显然不可能在32位系统上完全复制(int)的64位数字的功能。 (int)返回一个int;你可以在一个32位系统上为64位数字做的最好的事情是返回一个字符串 - 但可能这正是你所要求的。

正如tialaramex所指出的,如果你要用64位整数做很多工作,你应该运行64位PHP。如果这不是一个选项,你可以使用bcmath functions做一些工作 - 尽管我没有看到你做过的问题的bcmath函数。

我只是写一个快速而肮脏的功能:

<?php
var_dump(toint("12312342306A_C243"));
function toint($str) {
        return preg_match('/^[0-9]+/', $str, $matches) ? $matches[0] : 0;
}

答案 4 :(得分:2)

我通过强制转换而不是int来解决它:

(int)&#39; 8554104470&#39; =&GT; 2147483647

(float)&#39; 8554104470&#39; =&GT; 8554104470

答案 5 :(得分:1)

$bigint1="12312342306A_C243";
$bigint1=(int)$bigint1;//2147483647

如果您只想要第一个不是数字的字符的数字(正如您提到的那样,只需要12312342306),那么我建议只需剪切该字符串,取出您想要的内容,然后将其转换为int

function parseBigInt(string $bigInt, string $delimiter = '_'): int
{
  if (false !== ($pos = strpos($bigInt, $delimiter))) {
      $bigInt = substr($bigInt, 0, $pos);
  }

  return (int)$bigInt;
}

$bigInt = parseBigInt('12312342306A_C243'); // '12312342306' as int

答案 6 :(得分:0)

我正在对所有大小大于4个字节的整数使用bcmath functions。您必须牢记,所有操作数和结果都是字符串,但是很容易用于显示或作为参数值传递给数据库。