PHP の整数と浮動小数点数

WBOY
WBOYオリジナル
2016-06-23 14:33:011360ブラウズ

翻訳:http://www.ebrueggeman.com/blog/integers-and-floating-numbers/ 背景

PHP は厳密に型指定された言語ではなく、多くのプログラマーは数値型に注意を払わないことによって引き起こされる可能性のある問題を見落とすことがよくあります。問題は、整数が保持できる範囲の外に出た場合に PHP が警告を発しないことです。代わりに、値を暗黙のうちに float (浮動小数点数) に変換します。

なぜ気にする必要があるのでしょうか? float を使用した数学式は必ずしも正確であるとは限りません。時にはそれが大きく外れることもあります。 PHP は、ほとんどのプログラミング言語と同様に、ショートカットを使用して浮動小数点数学式の結果を推定します。経験則として、扱う数値が大きくなるほど、結果を見つけるために必要な推定量も多くなります。 PHP ベースの金融アプリケーションをプログラミングしている場合、これは大きな負担になる可能性があります。

PHP で大きな数値を処理する最良の方法は、整数の PHP 境界を知ることで、どのような種類の数値を扱っているかを正確に認識することです。 PHP は、PHP のインスタンスの最大整数を示す定数 PHP_INT_MAX を提供します。すべてのコンピューター、オペレーティング システム、PHP のバージョンが同じというわけではないため、各セットアップの PHP_INT_MAX を見つけることをお勧めします。 PHP_INT_MAX は最小の負の数も決定することに注意してください。 -1 を掛けるだけで PHP 整数の最小値が得られます。

PHP 整数テスト スクリプト

以下は、PHP_INT_MAX を決定するのに役立つテスト スクリプトです:

<?php$intMax = PHP_INT_MAX;   echo "$intMax<br />";   if (is_int($intMax)) {	echo "$intMax is an Int<br />";}else {	echo "$intMax is NOT an Int<br />";}   if (is_int($intMax + 1)) {	echo "$intMax+1 is an Int<br />";}else {	echo "$intMax+1 is NOT an Int<br />";}   if (is_int($intMax * (-1))) {	echo "$intMax*(-1) is an Int<br />";}else {	echo "$intMax*(-1) is NOT an Int<br />";}?>

このスクリプトの結果:

21474836472147483647 is an Int2147483647+1 is NOT an Int2147483647*(-1) is an Int
PHP Float テスト スクリプト

整数の範囲がわかったところで、何をしますか?実を言うと、浮動小数点数の整合性を保証するためにできることはそれほど多くありません。どの数値が浮動小数点数を含む数学の結果であるかを知ることの方が重要な場合があるため、これを聴衆に開示して、それに応じて行動することができます。 PHP が浮動小数点数を含む計算をいかにうまく実行できないかを示す以下の簡単な例を参照してください:

<?php//TEST 1$number = 216897510871;$original_number = $number;   $number *= 11123.74;$number /= 11123.74;   if ($original_number == $number) {	echo "Test 1: Are Equal<br />";}else {	echo "Test 1: Are NOT Equal<br />";}   //TEST 2$number = 216897510871;$original_number = $number;   $number *= 11123.75;$number /= 11123.75;   if ($original_number == $number) {	echo "Test 2: Are Equal<br />";}else {	echo "Test 2: Are NOT Equal<br />";}?>

このスクリプトの結果:

Test 1: Are EqualTest 2: Are NOT Equal
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。