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

float リテラルはすでに内部表現とは異なるものであるため、「元の形式」などというものはないことに注意してください。浮動小数点数は、プログラミングのコンテキストでは本質的に不正確であり、多くの浮動小数点数には、10 進数で表現できる特定の形式がありません。これが、他の回答に示されているように、それらに何らかの精度を設定することが最善の方法である理由です。

これは 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 に答える