PHP -- 将字符串转换为大整数

3
我有以下字符串,需要将其转换为整数或大整数。
$test="99999977706";

我尝试了:

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

但它们都返回给我2147483647。

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

非常感谢所有的建议。


1
https://dev59.com/EXVC5IYBdhLWcg3wsTZi - Sebastian Paaske Tørholm
需要是整数还是只是一个数字?因为(依赖于平台)强制转换为(float)可能有效。 - DaveRandom
我需要将其作为 int 类型以用于 MySQL 的比较目的。 - Kim
一个对我有效的解决方法是将其转换为 float - JureS
你想用那个数字实现什么目的?通常整数不能大于该值,而BigInt未内置于PHP。 - Nico Haase
6个回答

2
MySQL不会知道其中的区别。只需将字符串直接输入查询中,就像是一个数字一样,而无需先在PHP中进行类型转换。
例如:
$SQL = "SELECT * FROM table WHERE id = $test";

你好 @Treffynnon,我需要在 SQL 之前对 bigint 进行预处理。比如说,我需要使用 select ... where ... in ( some bigint values ),该怎么办? - Cauliturtle
@Cauliturtle,我不知道你在问什么,但是我建议你在StackOverflow上提出自己的问题,因为评论并不适合这种讨论。 - Treffynnon
你能分享更多有关这个的细节吗?问题中没有涉及到MySQL的连接,而且无论你想用给定的$SQL变量做什么,都不应该使用它来运行查询。 - Nico Haase

1
工作解决方案:
<?php
   $str = "99999977706";
   $bigInt = gmp_init($str);
   $bigIntVal = gmp_intval($bigInt);
   echo $bigIntVal;
   ?>

它将返回:99999977706。

0

如果需要使用任意长度的整数,请使用GMP


1
...可能是最好的解决方案,但需要指出的是,必须安装GMP扩展,否则您的gmp_init、gmp_intval等调用将失败! - Milan

0
在你的代码片段中,$test已经是一个数字,更具体地说是一个浮点数。当你将$test用作数字或字符串时,PHP会根据需要将其内容转换为正确的类型,因为该语言是弱类型的。

抱歉,我修改了它。$test实际上是一个字符串,我需要将其转换为数字以进行比较。 - Kim
如果你将它转换为浮点数,那么你就可以继续了。Mysql不知道php类型,所以你可以将其转换为浮点数,然后相应地使用它。 - Michael Dillon

0

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

只需使用正则表达式仅保留数字:

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

-1

它可以帮助你,

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

你可以参考这个链接


“Help” 能够实现什么?sprintf 永远不会返回 BigInt,而总是返回字符串。 - Nico Haase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接