我正在尝试在字符串变量中使用硬编码的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
看起来像一个近似问题,但如何解决这个问题呢?
答案 0 :(得分:3)
您正在失去作业的精确度,而不是字符串转换。如果这个变量的值实际上是硬编码的,而你无法改变它,那么你无能为力。
像:
这样的一行$i = 76561197961384956;
总会失去精确度。如果您需要保留整个内容,将其存储到字符串中,则不能将其存储为类似的int并保留所有数字。
答案 1 :(得分:2)
答案 2 :(得分:2)
现在只有在php中进行大整数数学的方法是使用bcmath或gmp扩展来处理大数字作为字符串。在php6中计划64位整数。
所以当使用大整数将它们转换为字符串时,你将失去分配的精度(自动转换为浮点数),然后使用字符串数学库来进一步处理你的数字。
答案 3 :(得分:-1)
您是否尝试过使用PHP的intval()函数?