0

我想将浮点数数组写入文件

<?php
$x=[0.000455,0.000123,0.00005690330203];
$fname='test.txt';
$str='';
foreach($x as $elem){
$str .= "$elem\n";
  }
file_put_contents($fname,$str);
?>

但在 test.txt 中,我看到

0.000455
0.000123
5.690330203E-5

我不希望浮点数以科学/指数形式显示,我希望它们保持原始形式,此外,还有像 12430120340 这样的大整数,所以如果我对浮点数使用特殊格式,比如 0.000123293304 那么也许它不适合大整数,也许将它们转换为字符串可能是个好主意?但如何?

4

2 回答 2

1

您可以使用该number_format函数来设置精度:

示例

$mynum = 24.2837162893;
$mynum = number_format($mynum, 2);
echo($mynum);

// Outputs 24.28

因此,如果您决定希望所有数字都保留 10 位小数,则只需使用$mynum = number_format($mynum, 10);.

此外,请参阅sprintf()函数以了解其他格式选项。

[编辑]

在您的特定示例中,您将在此处使用此功能:

<?php
   $x=[0.000455,0.000123,0.00005690330203];
   $fname='test.txt';
   $str='';
   foreach($x as $elem){
      $str .= number_format($elem, 5) . "\n";
   }
   file_put_contents($fname,$str);
?>

如另一个答案中所述,浮点值本质上是不精确的。您必须决定在您的用例中什么精度对您很重要。

参考: http: //php.net/manual/en/function.number-format.php

于 2012-11-06T14:02:45.620 回答
0

您应该注意,没有“原始形式”之类的东西,因为浮点文字已经与内部表示不同。浮点数在编程环境中本质上是不精确的,并且许多浮点数没有可以用十进制表示的特定形式。这就是为什么你能做的最好的就是对它们设置某种精度,如另一个答案所示。

这与 PHP 无关,而是与一般编程有关。

如果您将相同的内容存储为字符串而不是浮点数,请说:

$x     = ['0.000455', '0.000123', '0.00005690330203'];
$fname = 'test.txt';
$str   = '';

foreach($x as $elem) {
  $str .= "$elem\n";
}

file_put_contents($fname, $str);

那么您在打印或将它们写入文件时应该没有问题。

于 2012-11-06T14:10:36.523 回答