ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルの浮動小数点 (float) と整数 (integer) データ型の詳細な説明

php_PHP チュートリアルの浮動小数点 (float) と整数 (integer) データ型の詳細な説明

WBOY
WBOYオリジナル
2016-07-13 17:13:351318ブラウズ

この記事では、PHP における浮動小数点 (float) と整数 (integer) データ型の使用法の違いと、データ長が不十分な場合に何が起こるかを分析します。

値は True または False のみです。他の型がブール型に変換される場合、次の値は FALSE とみなされます。

ブール値 FALSE 自体

整数値 0 (ゼロ)
浮動小数点値 0.0 (ゼロ)
空の文字列と文字列「0」
要素を含まない配列
メンバー変数を含まないオブジェクト (PHP 4.0 にのみ適用可能)
特殊な型 NULL (設定されていない変数を含む)
タグのない XML ドキュメントから生成された SimpleXML オブジェクト
他の値はすべて TRUE (リソースを含む) とみなされます。

整数データ型:

整数値は、オプションの記号 (- または +) を前に付けて、10 進数、16 進数、または 8 進数で表すことができます。

8 進数は数値の前に 0 (ゼロ) を追加する必要があることを意味し、16 進数は数値の前に 0x を追加する必要があることを意味します。

整数の語長はプラットフォームに依存しますが、通常の最大値は約 20 億 (32 ビット符号付き) です。 PHP は符号なし整数をサポートしていません。整数値の語長は定数 PHP_INT_SIZE で表すことができます。PHP 4.4.0 および PHP 5.0.5 以降では、最大値は定数 PHP_INT_MAX で表すことができます。

指定された数値が整数の範囲を超える場合、浮動小数点として解釈されます。同様に、演算結果が整数の範囲を超える場合も浮動小数点数が返されます。

PHP には整数の除算演算子がありません。 1/2 は float 0.5 を生成します。小数部分はいつでも破棄するか、round() 関数を使用できます。

値を整数に明示的に変換するには、(int) または (integer) キャストを使用します。ただし、演​​算子、関数、またはフロー制御で整数パラメーターが必要な場合、値は自動的に変換されるため、ほとんどの場合、キャストは必要ありません。関数 intval() を使用して値を整数型に変換することもできます。

ブール値から変換すると、FALSE は 0 (ゼロ) を生成し、TRUE は 1 (1) を生成します。

浮動小数点数からの変換 浮動小数点数から整数への変換では、ゼロ方向に丸められます。浮動小数点数が整数の範囲 (通常は +/- 2.15e+9 = 2^31) の外にある場合、浮動小数点数には正確な整数の結果を与えるのに十分な精度がないため、結果は不定になります。この場合、警告はなく、通知さえありません。

として

整数型は、集合 {..., -2, -1, 0, 1, 2, ...} 内の数値を指します。

整数型の定義例:

$var_int = 12345;

整数値は 10 進数、16 進数、または 8 進数の表記で指定できます。8 進数の表記を使用する場合は、数値の前に 0 (ゼロ) を追加する必要があります。16 進数の表記を使用する場合は、数値の前に 0x を追加する必要があります。
$var_int = 0123; // 8 進数 (10 進数の 83 に等しい)

$var_int2 = 0x1A; // 16 進数 (10 進数の 26 に等しい)

ヒント: 整数データには一重引用符や二重引用符は必要ありません。そうでない場合は、文字列型として定義されます。

整数オーバーフロー

指定された数値が整数の範囲を超える場合は、float 型として解釈されます。同様に、演算結果が整数の範囲を超える場合も浮動小数点数が返されます。


整数値の範囲はプラットフォームによって異なります。通常、最大値は約 20 億 (32 ビット符号付き) です。

floatデータ型

浮動小数点数の語長はプラットフォームに依存しますが、通常、最大値は 10 進数 14 桁 (64 ビット IEEE 形式) の精度で 1.8e308 です。


0.1 や 0.7 などの一見単純な小数は、精度を少し損なうことなく内部バイナリ形式に変換できません。これは、混乱を招く結果につながる可能性があります。たとえば、floor((0.1+0.7)*10) は、結果の内部表現が 7.9 のようなものであるため、期待される 8 ではなく 7 を返すことがよくあります。

これは、有限の桁数で特定の小数を正確に表現することが不可能であるという事実と関係しています。たとえば、10 進数の 1/3 は 0.3 になります。

float には、1 つの符号ビット、8 つの指数ビット、および 24 の有効数字があります (23 ビットのみが保存されます) もちろん、先ほどの binary32 のバイナリは、メモリ内の浮動小数点を示しています。表現

31 番目のビットは符号ビット、23 ~ 30 は指数ビット、0 ~ 22 は小数ビットです。また、有効数字には隠れたビットがあり、これは常に 1 です。したがって、有効ビットの部分は常に 1 になります。 1. 127 の後の数字は最終的な指数を表します。上の図の指数部は 01111100 で、これを 10 進数の 124 に変換してから 127 を引くと、結果は -3 になります。つまり、指数部は次のようになります。 2-3=1/8 =0.125 では、隠しビットを追加すると、1.0100000000000000000000=1+(1*2-2)=5/4=1.25 と表されます。は 1/8 * 5/4 = 0.15625 です。


インデックスが表現できる最大値と最小値は 127 と -126 です。これを -126 に設定する目的は、8 ビットで表現できる必要があることです。 (1/2-126) はオーバーフローではないためです (これは少しわかりにくいですが、ドキュメントにはこのように書かれています)。ここで 127 と -126 は 2 の指数として表現されます。したがって、これらを の指数として表現するとどうなるでしょうか。 10? 関数 y=10x は x = log10y であることがわかります。 もちろん、ここで 10 の後には、他の数値を続けることができます。 つまり、指数の範囲は -37 ~ 38 になります。では、有効数字が 7 桁の場合はどうなるでしょうか? 同じ理由で log2(24) = 7.22 になります。つまり、24 桁の有効数字は 107 桁に相当し、有効数字は 7 桁になります。最大の指数は 127 であることがわかっています。最大有効数はすべてのビットが 1 であるため、この数値は

である必要があります。

1.11111111111111111111111*2127 ≈ 3.4028234 * 1038 .


フロート型


$a = 1.234; $b = 1.2e3; $c = 7E-10;
?>

PHPのfloat型を使用する際の注意点: PHPのfloat型の精度には問題があります。高精度の数学計算が必要な場合は、PHP が提供する任意精度数学関数シリーズおよび gmp シリーズ関数を使用できます。また、float 型の変数を比較しないでください。

注: 浮動小数点数の語長はプラットフォームに依存しますが、通常、最大値は 10 進数 14 桁 (64 ビット IEEE 形式) の精度で 1.8e308 です

概要:

float の長さはプラットフォームによって異なります。通常、最大値は 1.8e308 で、10 進数 14 桁の精度になります。指定された数値が整数の範囲を超える場合は、その整数の範囲とプラットフォームに応じて float 型として解釈されます。通常、最大値は約 20 億 (32 ビット符号付き) です。ページ アライメントの利点は、演算結果が整数の範囲を超える場合、浮動小数点も返されることです。

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

tru​​ehttp://www.bkjia.com/PHPjc/629172.html技術記事この記事では、PHP における浮動小数点 (float) と整数 (integer) データ型の使用法の違いと、その場合の不十分なデータ長について分析します。 値は True または False のみであり、それ以外の場合は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。