3

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

简化我想做这样的事情:

$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

4 回答 4

3

您正在失去分配的精度,而不是字符串转换。如果此变量的值实际上是硬编码的,并且您无法更改它,那么您无能为力。

像这样的一行:

$i = 76561197961384956;

总是会失去精度。如果您需要保留整个内容,请将其存储到一个字符串中,您不能将它存储为这样的 int 并保留所有数字。

于 2009-05-13T07:40:52.437 回答
2

我认为唯一的方法是使用这些bcmath功能。

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

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

于 2009-05-13T07:34:02.760 回答
2

目前,在 php 中进行大整数数学运算的唯一方法是使用 bcmath 或 gmp 扩展,将大数字作为字符串处理。64 位整数在 php6 中进行了规划。

因此,当使用大整数时,将它们转换为字符串,否则您将失去分配精度(自动转换为 float),然后使用字符串数学库中的一个来进一步处理您的数字。

于 2009-05-13T08:14:09.763 回答
-1

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

于 2009-05-13T07:34:44.227 回答