PHP:将64位整数转换为字符串

时间:2009-05-13 07:26:48

标签: php casting 64-bit long-integer

我正在尝试在字符串变量中使用硬编码的64位整数。

Simplfied我想做这样的事情:

$i = 76561197961384956;
$s = "i = $i";

哪个应该导致s

i = 76561197961384956

这显然不起作用,因为PHP将大整数浮动,因此s是:

i = 7.65611979614E+16

虽然其他几种方法(如施法等)失败,但我发现number_format()并使用它如下:

$s = "i = " . number_format($i, 0, '.', '');

但这会导致s

i = 76561197961384960

看起来像一个近似问题,但如何解决这个问题呢?

4 个答案:

答案 0 :(得分:3)

您正在失去作业的精确度,而不是字符串转换。如果这个变量的值实际上是硬编码的,而你无法改变它,那么你无能为力。

像:

这样的一行
$i = 76561197961384956;

总会失去精确度。如果您需要保留整个内容,将其存储到字符串中,则不能将其存储为类似的int并保留所有数字。

答案 1 :(得分:2)

我认为唯一的方法是使用bcmath函数。

  

对于任意精度数学,PHP提供了二进制计算器,它支持任意大小和精度的数字,表示为字符串。

这是你的$i错了,而不是字符串转换 - PHP在内部使用32位整数。

答案 2 :(得分:2)

现在只有在php中进行大整数数学的方法是使用bcmath或gmp扩展来处理大数字作为字符串。在php6中计划64位整数。

所以当使用大整数将它们转换为字符串时,你将失去分配的精度(自动转换为浮点数),然后使用字符串数学库来进一步处理你的数字。

答案 3 :(得分:-1)

您是否尝试过使用PHP的intval()函数?