我试图在一个字符串变量使用硬编码的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

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

有帮助吗?

解决方案

您正在失去对分配的精度,而不是字符串转换。如果这个变量的值实际上是硬编码的,你不能改变的,还有什么可以做的。

像A线:

$i = 76561197961384956;

将永远失去精度。如果你需要保持整个事情,它存储到一个字符串,你不能将它作为存储这样一个int,并保持所有的数字。

其他提示

我想的唯一方法是使用 bcmath 功能

  

有关的任意精度的数学PHP提供支持的任何尺寸和精度,表示为字符串的号码二进制计算器。

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

现在唯一的办法大整数运算在PHP是使用处理大量的字符串bcmath时或GMP扩展。 64位整数被刨光在PHP6。

因此,使用大的整数,当它们转换成字符串,否则你将失去在分配(自动施放浮动),然后使用该字符串数学库的进一步处理你的电话号码精度。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top