web-dev-qa-db-ja.com

なぜPHP .000021と指定した場合、数値を科学表記で出力するのですか?)

PHPには次のコードがあります:

<?PHP
  $var = .000021;
  echo $var;
?>

出力は2.1E-5です!

どうして?それは.000021を印刷する必要があります

36
ahmed

number_format() を使用して、目的を取得します。

print number_format($var, 5);

また、チェック sprintf()

51
acrosman

2.1E-5は、0.000021と同じ数です。これは、0.001未満の数値を出力する方法です。特定の形式で使用する場合は、 printf() を使用します。

編集2.1E-5構文。2.1×10の省略形であることを知っておく必要があります。-5。ほとんどのプログラミング言語は、科学表記法で数値を表す方法です。

25
Kip

一般に、数値は文字列ではなく数値であり、これは、すべてのプログラミング言語が数値を数値として扱うことを意味します。したがって、数値自体は特定の形式を意味しません(.000021の代わりに2.1e-5を使用するなど)。これは、先頭に0を付けて数値を表示する(0.000021など)か、数値のリストを整列することと何の違いもありません。これは、どのプログラミング言語にも見られる一般的な問題です。特定のフォーマットが必要な場合は、プログラミング言語のフォーマット関数を使用して、それを指定する必要があります。

もちろん、数値を文字列として指定し、必要に応じて実数に変換する場合を除きます。一部の言語ではこれを暗黙的に行うことができます。

8
bluebrother

期待どおりに数値を表示するには、 number_format または sprintf を使用します。

echo sprintf('%f', $var);
echo number_format($var, 6);
8
Vex

(number_formatのように煩わしい場合があるように)右側に余分なゼロを付けずに、8桁までの小数スペースを表示するには、次のようにします。

echo rtrim(rtrim(sprintf('%.8F', $var), '0'), ".");
6
Joey Rich

プログラミング言語には、メモリに数値を格納するためのさまざまな方法があります。これは、使用されている番号のタイプによって決まります。あなたのケースでは、固定小数点数として格納するには大きすぎる浮動小数点数(小数)があります(小数はサイズに応じてこの方法で格納されます)。

これは、非常に大きな数または非常に小さな数を処理する場合に特に重要な機能です。たとえば、NASAまたはspaceXは、計算に特別な保存方法を使用して、ロケットが地球に再突入する際に、軌道に乗るようにします。

また、保存方法が異なれば、メモリ容量も異なります。ただし、上記のソリューションは機能するはずです。非常に大きいまたは小さい数値で丸めエラーが発生する可能性があることを覚えておいてください。

1
Student101

以前の回答はOPの質問に答えましたが、それを行うためのコードを提供するものはありませんでした。
この関数を使用して、任意の数値をE-形式でフォーマットします。

function format_amount_with_no_e($amount) {
    $amount = (string)$amount; // cast the number in string
    $pos = stripos($amount, 'E-'); // get the E- position
    $there_is_e = $pos !== false; // E- is found

    if ($there_is_e) {
        $decimals = intval(substr($amount, $pos + 2, strlen($amount))); // extract the decimals
        $amount = number_format($amount, $decimals, '.', ','); // format the number without E-
    }

    return $amount;
}

関数は常に文字列を返すことに注意してください。

1
Binar Web