10

我一直在使用预期结果将变为的 PHP 代码:

1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000001
1000000000000000001


最后的输出是:

1
101
10001
1000001
100000001
10000000001
1000000000001 //(10亿)(1000亿-1)还是显示实际数字,然后是
1.0E+14
1.0E+16
1.0E+18


我在那里找到了一些解决方案!他们说通过使用sprintf或尝试format_number。我都试过了。

使用sprintf和结果:

$format_x = sprintf("%.0f ",$x);
echo $format_x.$br;

1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000000
1000000000000000000


使用format_number和结果:

echo number_format($x, 0).$br;

1
101
10,001
1,000,001
100,000,001
10,000,000,001
1,000,000,000,001
100,000,000,000,001
10,000,000,000,000,000
1,000,000,000,000,


但它仍然没有显示实际的大数字。嗯,这两种方式看起来不错,但它不符合我想要的。有人可以解决这个问题吗?

4

2 回答 2

9

您可以使用标准bc_math库来处理大量运算。请注意,在这种情况下,您的数字将表示为字符串,但库为此类字符串下的操作提供了特定方法。

于 2013-08-20T06:30:21.627 回答
3

你绝对应该使用 BCMath。

如果您想知道为什么不能使用常规数字来执行此操作,那是因为它们是浮点数,并且它们在内存中使用固定数量的空间(准确地说是 64 位),因此它们的精度在物理上是有限的。否则,字符串不受限制,因为如果文本的长度受到限制,那将是愚蠢的。这就是 BcMath 和其他库使用字符串进行算术计算的原因。

如果你想了解更多关于 PHP(以及几乎所有语言)用来存储大数字的格式,你可以去那里:http ://en.wikipedia.org/wiki/Double-precision_floating-point_format

祝你有美好的一天

于 2013-08-20T06:53:55.413 回答