PHP如何显示所有小数位?

Posted

技术标签:

【中文标题】PHP如何显示所有小数位?【英文标题】:PHP how to show all decimal places? 【发布时间】:2014-02-17 23:00:13 【问题描述】:

这可能是一个愚蠢的问题,但我一次又一次地搜索,但没有找到任何结果。

所以,我想要的是显示一个数字的所有小数位,而不知道它会有多少个小数位。看看这个小代码:

$arrayTest = array(0.123456789, 0.0123456789);

foreach($arrayTest as $output)
    $newNumber = $output/1000;
    echo $newNumber;
    echo "<br>";

它给出了这个输出:

0.000123456789
1.23456789E-5

现在,我尝试使用“number_format”,但我认为这不是一个好的解决方案。它确定了精确的小数位数,我不知道每个数字的小数位数。看看下面的代码:

$arrayTest = array(0.123456789, 0.0123456789);

foreach($arrayTest as $output)
    $newNumber = $output/1000;
    echo number_format($newNumber,13);
    echo "<br>";

它给出了这个输出:

0.0001234567890
0.0000123456789

现在,您可以看到第一个数字中有多余的 0,因为 number_format 强制它保留 13 位小数。

我真的很想得到一些关于如何解决这个问题的指导。 php.ini 中是否有确定小数位数的设置? 非常感谢您! (如果您有任何其他问题,请随时询问)

【问题讨论】:

您确实意识到,我希望,浮点数的十进制表示几乎总是近似的? 【参考方案1】:

正确回答这个问题是“不可能的”——因为十进制数的二进制浮点表示是近似的:"What every computer scientist should know about floating point"

最接近的方法是为自己编写一个例程,查看数字的十进制表示,并将其与“精确”值进行比较;一旦差异变得“足以满足您的目的”,您就停止添加更多数字。

然后,此例程可以将“正确的位数”作为字符串返回。

例子:

<?php
$a = 1.234567890;
$b = 0.123456789;
echo returnString($a)."\n";
echo returnString($b)."\n";

function returnString($a) 
// return the value $a as a string
// with enough digits to be "accurate" - that is, the value returned
// matches the value given to 1E-10
// there is a limit of 10 digits to cope with unexpected inputs
// and prevent an infinite loop

  $conv_a = 0;
  $digits=0;

  while(abs($a - $conv_a) > 1e-10) 
    $digits = $digits + 1;
    $conv_a = 0 + number_format($a, $digits);
    if($digits > 10) $conv_a = $a;
  

  return $conv_a;



?>

哪个产生

1.23456789
0.123456789

在上面的代码中,我武断地假设在 1E-10 以内就足够了。显然,您可以将此条件更改为适合您遇到的数字的任何内容 - 您甚至可以将其作为函数的可选参数。

试一试 - 如果不清楚,请提出问题。

【讨论】:

以上是关于PHP如何显示所有小数位?的主要内容,如果未能解决你的问题,请参考以下文章

如何在用电子表格(),php生成的.csv文件中显示带小数的整数?

PHP - 如何添加小数,.我的号码不加 00?

如何在php中设置小数点后最多8位[重复]

PHP保留两位小数显示

如何显示不带小数的整数

PHP zerofill 数字不丢失小数