php:bigint类型的等效int()
函数是什么? (int()
将大数字削减到2147483647)?
示例:
$bigint1="12312342306A_C243";
$bigint1=(int)$bigint1;//2147483647
但我希望它是12312342306。
答案 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的最小值。
答案 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。您必须牢记,所有操作数和结果都是字符串,但是很容易用于显示或作为参数值传递给数据库。