PHP:大整数数字错误

4
我遇到了一个奇怪的错误,请看代码:
    $val1 = pow(2, 64);
    $val2 = $val1 - 1;
    echo number_format($val1, 0, '', '') . "<br/>";
    echo number_format($val2, 0, '', '') . "<br/>";

以及它的输出

18446744073709551616
18446744073709551616

为什么$val2的值是18446744073709551616,而不是应该是18446744073709551615?涉及IT技术相关内容。

https://dev59.com/2G3Xa4cB1Zd3GeqPicf0 - hjpotter92
相关:PHP数学精度 - Álvaro González
1个回答

1
因为$val1变成了浮点数,浮点精度不是很高。看看浮点精度的例子吧。只需看一下手册中的示例floor((0.1+0.7)*10)应该是8,但在我的电脑上也返回7(如手册中所述)。
如果你想使用这样的大数字,你应该使用专用的PHP库或BCMath

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