17

科学表記法の数値を含む文字列を double に変換する方法を教えてください。

文字列の例: 「1.8281e-009」「2.3562e-007」「0.911348」

数値を左側の数値と指数に分割し、数値を生成するために計算を行うだけではなく、数値を生成することを考えていました。しかし、これを行うためのより良い/標準的な方法はありますか?

4

8 に答える 8

17

つまり、値を解析して型を判別する必要があります (最近のバージョンの PHP には型宣言があります)。

あなたの場合、単純に数値演算を実行して、PHP に値を数値と見なさせることができます (そして、科学表記法を理解しますx.yE-z)。

たとえば試してみてください

  foreach (array("1.8281e-009","2.3562e-007","0.911348") as $a)
  {
    echo "String $a: Number: " . ($a + 1) . "\n";
  }

1 を足すだけで (0 を引くこともできます)、文字列が適切な数の小数部を持つ数字になります。

結果:

  String 1.8281e-009: Number: 1.0000000018281
  String 2.3562e-007: Number: 1.00000023562
  String 0.911348:    Number: 1.911348

を使用して結果をキャストすることもできます(float)

  $real = (float) "3.141592e-007";
于 2011-01-02T03:18:21.927 に答える
10
$f = (float) "1.8281e-009";
var_dump($f); // float(1.8281E-9)
于 2011-01-02T03:36:42.393 に答える
6

次のコード行は、bigint 値を表示するのに役立ちます。

$token=  sprintf("%.0f",$scienticNotationNum );

このリンクを参照してください。

于 2013-02-07T11:01:14.907 に答える
4
$float = sprintf('%f', $scientific_notation);
$integer = sprintf('%d', $scientific_notation);
if ($float == $integer)
{
    // this is a whole number, so remove all decimals
    $output = $integer;
}
else
{
    // remove trailing zeroes from the decimal portion
    $output = rtrim($float,'0');
    $output = rtrim($output,'.');
}
于 2012-07-26T10:43:19.767 に答える
3

number_format を使用して、値を浮動小数点数から非科学表記数に変換する投稿を見つけました。

http://jetlogs.org/2008/02/05/php-problems-with-big-integers-and-scientific-notation/

編集者注: リンクが腐っています

投稿の例:

$big_integer = 1202400000; 
$formatted_int = number_format($big_integer, 0, '.', ''); 
echo $formatted_int; //outputs 1202400000 as expected 

HTH

于 2013-06-13T15:42:14.407 に答える