我正在为网站目的处理大量数据,我需要进行长时间的计算。当我回显一个长数字时,我没有得到正确的输出。
示例
// A random number
$x = 100000000000000000000000000;
$x = number_format($x);
echo "The number is: $x <br>";
// Result: 100,000,000,000,000,004,764,729,344
// I'm not getting the value assigned to $x
最佳答案
您的数字对于 php 标准整数来说实际上太大了。 php 使用 64 位整数,可以保存 -9223372036854775808 范围内的值 (PHP_INT_MIN
)
至 +9223372036854775807(PHP_INT_MAX
)。
您的数字大约有 87 位长,这实在是太多了。
如果你真的需要这么大的数字,你应该使用 php BC 数学类型,在手册中有解释:http://php.net/manual/en/ref.bc.php
如果你只是想格式化一个像一个巨大的数字一样的字符串,那么使用这样的东西:
function number_format_string($number) {
return strrev(implode(',', str_split(strrev($number), 3)));
}
$x = '100000000000000000000000000';
$x = number_format_string($x);
echo "The number is: $x\n";
// Output: The number is: 100,000,000,000,000,000,000,000,000
编辑: 添加了 strrev() 函数,因为字符串在拆分之前需要反转(感谢@ceeee 的提示)。这样可以确保当输入的长度不能被 3 整除时,分隔符位于正确的位置。生成的字符串之后需要再次反转。
可在 http://sandbox.onlinephpfunctions.com/code/c10fc9b9e2c65a27710fb6be3a0202ad492e3e9a 找到工作示例
关于格式化长数字时,PHP 给出不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35169951/