【问题标题】:(PHP) How to avoid scientific notation and show the actual large numbers?(PHP) 如何避免科学记数法并显示实际的大数?
【发布时间】:2013-08-22 02:35:01
【问题描述】:

我一直在使用预期结果将变为的 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,000,000


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

【问题讨论】:

    标签: php floating-point scientific-notation


    【解决方案1】:

    您绝对应该使用 BCMath。

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

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

    祝你有美好的一天

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 对于整数 - 可能是。但是主题开始者提到了“大数字” - 即可能是浮点数。
      • 我只知道 bc_math 函数。你能帮我bc_math如何在上面的代码上工作吗?我试过 bcpow 但不起作用。是否必须首先在我的 php 文件中包含 bcpow 的函数?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多