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如何显示所有小数位?的主要内容,如果未能解决你的问题,请参考以下文章