(PHP)如何避免科学记数法并显示实际的大数字?

时间:2013-08-20 06:27:00

标签: php floating-point scientific-notation

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

  

1   
101   
10001   
1000001   
100000001   
10000000001   
万亿○一   
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   
万亿○一   
100000000000001   
10000000000000000   
1000000000000000000

使用 format_number ,结果:

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

1   
101   
10,001   
1,000,001   
100000001   
10000000001   
1,000,000,000,001   
100,000,000,000,001   
10,000,000,000,000,000   
1,000,000,000,000,000,000

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

我建议你看一下php中的BC Math扩展名。

答案 2 :(得分:2)

你绝对应该使用BCMath。

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

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

度过美好的一天