将字符串转换为整数在PHP中无法正常工作

3

我试图将一个字符串数字转换成整数,但结果并不如预期。以下是出现问题的代码:

$usage['msisdn'] = "46720000000";
$usage['msisdn'] = (int)$usage['msisdn'];

echo $usage['msisdn'];

这段代码将2147483647作为整数输出,但我想要得到46720000000作为整数。

顺便说一下,我正在使用json_encode()解析数据。


更新: 不用管了,我已经用intval()解决了问题


3
好的,我会尽力为您翻译。以下是原网页中需要翻译的内容:

在PHP中处理大数字

我在处理一个需要使用非常大的整数的应用程序。PHP浮点和double类型的变量不能包含我的数据集,所以我认为我需要使用字符串或其他类型。我需要执行基本的算术运算(加,减,乘,除),比较,格式化和转换到十六进制。有哪些建议或库可以实现这些功能?
- Sougata Bose
我使用intval()函数,现在它已经可以工作了,谢谢:) - Hassan Ila
2个回答

7

这是因为 int32 的最大值为 2,147,483,647。您的电话号码超过了这个值。

您可以使用以下代码在服务器上找到 int 的最大值:

echo PHP_INT_MAX;

我认为将电话号码存储为整数是一个不好的做法,而且可能会在以后影响你。为什么呢?因为电话号码可能以以下方式开头:
- IDD:00或+ - NDD:0
此外,您可能希望在某个时候格式化电话号码,将其存储为字符串可以使这一部分更加容易。
圣诞奖金 :) libphonenumber-for-php

那我该怎么修复呢? - Hassan Ila
1
唯一的方法是将服务器升级到64位操作系统和硬件。我建议您将电话号码保留为字符串。实际上,电话号码是一个字符串,因为它可能以IDD“00”、“+”或NDD“0”开头,或者国家代码也可能以“0”开头。此外,将其保存为字符串可以帮助您格式化电话号码。 - Mihai Matei
1
编辑了我的答案,就在上面,由于您不能轻易修改max_int值,所以可以尝试使用浮点数转换。 - Nirnae
1
谢谢@MateiMihai,我不知道将电话号码存储为字符串更好。现在我会让它保持为字符串 :) - Hassan Ila
1
谢谢您还给了圣诞奖金;) @MateiMihai - Hassan Ila

4
您的代码无法工作,因为转换字符串为整数时,最大值基于文档中引用的系统:

最大值取决于系统。32位系统具有-2147483648到2147483647的最大有符号整数范围。例如,在这样的系统上,intval('1000000000000')将返回2147483647。64位系统的最大有符号整数值为9223372036854775807。

来源:http://php.net/manual/en/function.intval.php

由于您不能轻松修改max_int值,因此可以尝试使用转换为浮点数。

$usage['msisdn']  = floatval($usage['msisdn']);

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