ホームページ >バックエンド開発 >PHPチュートリアル >PHP浮動小数点精度値サンプルプログラムの詳細説明_PHPチュートリアル

PHP浮動小数点精度値サンプルプログラムの詳細説明_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:49:301044ブラウズ

この記事では、PHP 浮動小数点精度値サンプル プログラムの詳細な説明を紹介します。浮動小数点精度値を理解する必要がある友人が参考になれば幸いです。

PHP の浮動小数点数の精度値は、浮動小数点数の出力を制御するために使用されます。精度値が異なると、出力結果が異なる場合があります。内部値は実際の値に基づいて保存されます。2 つの浮動小数点数が四則演算に使用される場合、その元の値が引き続き使用されます。

精度は、グローバルに指定される浮動小数点数の精度値を設定するために使用されます。デフォルト設定は、Windows では 12 ですが、Linux では 14 であるようです。もちろん、プログラム内で ini_set を使用してグローバル設定を変更することもできます。例:

コードは次のとおりです コードをコピー
ini_set("精度", "15");

私は常に精度を保持される小数点の数として理解していましたが、これは PHP 浮動小数点数の場合ですか?答えは否定的です。

浮動小数点数は実際には整数部と小数部で構成されており、整数部の桁数と小数部の桁数を加算した値が最大精度値を超えることはできません。丸め方法に従って最大精度値に切り捨てられます。整数部が0の場合は桁数はカウントされず、小数部末尾の0もカウントされません。さらに、同じ数値であっても、精度が異なると表示される表現形式も異なる場合があります。以下に例を挙げて説明する。

整数部分が0の場合

コードは次のとおりです コードをコピー

$num = 0.12345600000000000;
//整数部は0、桁数は0、小数部末尾の0は桁数に含まれないので合計桁数は6

ini_set("精度", "12");
エコー $num; // 0.123456
//精度値を超えていないため、表示される結果は 0.123456 です

ini_set("精度", "3");
エコー $num; // 0.123
//精度の値を超えた場合、3 桁が予約されます

ini_set("精度", "5");
エコー $num; // 0.12346

//精度の値を超え、5 桁を保持します。この場合、精度の値は小数点以下の桁数に相当します。

整数部分が0より大きい場合

コードは次のとおりです コードをコピー

$num = 12.12345600000000000;
//整数部は12、桁数は2、小数部末尾の0は桁数に含まれません、桁数は6なので合計桁数は2+6

ini_set("精度", "12");
エコー $num; // 12.123456
//精度値を超えていないため、表示される結果は 12.123456 です

ini_set("精度", "3");
エコー $num; // 12.1
//精度の値を超えているため、整数部分の桁数は2であるため、小数点以下1桁のみが保持されます

ini_set("精度", "5");
エコー $num // 12.123
//精度の値を超えると、整数部分の桁数は 2 になるため、小数点以下の桁数は 3 桁のみ保持されます。小数点以下の桁数は精度と桁数に関係していることがわかります。整数部分

整数部分が0より大きい場合のケース2

コードは次のとおりです コードをコピー

$num = 12345678.12345600000000000;
//整数部は12345678、桁数は8、小数部末尾の0は桁数に含まれない、桁数は6なので合計桁数は8+6

ini_set("精度", "12");
エコー $num; // 12345678.1235
//精度の値を超えているため、表示される結果は 12345678.1235 です

ini_set("精度", "3");
echo $num; // 1.23E+7
//精度値を超えており、整数部分の桁数が精度を超えているため、小数部分は破棄され、整数部分として 3 桁のみが取得されます

ini_set("精度", "5");
エコー $num; // 12346000

//精度の値を超えており、整数部分の桁数が精度を超えているため、小数部分は破棄され、整数部分として 5 桁のみが取得されます。上記の例からわかるように、精度の値は次のとおりです。整数部分のインターセプトにも関係します。最後の 2 つの例は異なる方法で表示されていることに注意してください。1 つは科学的表記法を使用し、もう 1 つはその後に 0 補数が続きます。実験により導き出された結論は、整数部の桁数から精度の値を引いた値が 4 より大きい場合は科学表記法が使用され、それ以外の場合は 0 が補われます。精度の値を超えると切り捨てられます。最終的に、埋め込まれたゼロの数は 4 を超えません。

浮動小数点演算

コードは次のとおりです コードをコピー

$num1 = 1331625729.687;
$num2 = 1331625730.934;
ini_set("精度", "8");

$num1 をエコーし​​ます。 ';
エコー $num2 '
';

$sub = $num1 - $num2;

$sub をエコー '

';
//出力結果は次のようになります:
/*
1331625700
1331625700
-1.247
*/

上記の例は、精度の値は表示結果のみを制御し、内部ストレージは元の値のままであることを示しています。そのため、$sub の値は 1331625729.687 から 1331625730.934 を引いたものになります。

PHP の組み込みの echo、var_dump、json_encode、文字列連結、およびその他の関数 (命令) では、浮動小数点数を表示するときに問題が発生し、精度が失われます。

コードは次のとおりですコードをコピー

$a = 1315537636.338467;

printf("%f", $a); echo "n";

echo $a . "n";

echo $a;

?>

結果

1315537636.338467

1315537636.3385

1315537636.3385

つまり、PHPの最も便利な方法で浮動小数点数を文字列に変換したり表示したりすることはできず、浮動小数点数を文字列に変換するにはprintf/sprintfを使用する必要があります。

http://www.bkjia.com/PHPjc/632694.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632694.html技術記事この記事では、PHP 浮動小数点精度値のサンプル プログラムの詳細な説明を紹介します。浮動小数点精度値を理解する必要がある友人が参考になれば幸いです。 PHPの浮動小数点数の精度値は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。