PHPで文字列を数値変換する方法を解説!
PHPで文字列を数値へ変換する方法について、PHPの型の説明と共にサンプルコード付きで解説していきます。
PHPで文字列を数値変換したい
PHPで文字列を数値変換する前に、PHPのデータ型について少し触れておきたいと思います。
PHPの変数は 暗黙的な型変換 が行われます。 暗黙的な型変換 とはコンパイラの判断によって自動的に行われるキャスト(型変換)です。
PHPは自動で型を変換してくれるので、初心者でも簡単にコーディングすることができます。
しかし、型が明確ではない為に想定外の障害を発生させてしまうリスクにもなります。
今回は文字列から数値型へ 明示的な型変換 をしていく方法についてご紹介します。
型の確認
PHPで文字列はString
ですが、数値の型には下記2種類があります。
Int
:整数型Float
/Double
:浮動小数点数型
文字列の「99.99999」
'99.99999'
数値の「100」
100
数値の「99.99999」
99.99999
型を確認するには、PHPのvar_dump()
を使って表示する事ができます。
文字列の「99.99999」はString
・数値の「100」はint
・数値の「99.99999」はfloat
である事がわかります。
それでは次にPHPで文字列を数値変換する方法を解説いたします。
PHPで文字列を数値変換する方法
今回はPHPで文字列を数値の整数へキャストする方法と、浮動小数点型にキャストする方法に分けて解説します。
PHPで文字列を整数へキャストする
文字列を整数へキャストするには、下記2つの方法があります。
(int)を使ってキャストする方法
(int)'100'
intval()を使ってキャストする方法
intval('100')
上記2つは文字列の「100」を整数へキャストします。
それでは、文字列の「99.9999」を整数へキャストすると小数点以下はどうなるのでしょうか?
上記2つのサンプルコードと共に、キャスト後の値を確認してみましょう。
var_dump()
の結果を見ると「(int)
を使った方法」も「intval()
を使った方法」でも無事に文字列をint型の整数に変換出来ていることがわかります。
文字列を整数にキャストすると、小数点以下の数値は切り捨てされます。文字列の「99.99999」は小数点以下が切り捨てられ数値の「99」へキャストされています。
また、正常に整数への変換が行われなかった場合は、0が戻ります。
intval関数の使い方
第1引数には 整数に変換する値 を、第2引数へは 変換のための基数 をセットします。
変換のための基数 は、初期値0 ですが、16進数へ変換したい場合は16を、8進数へ変換したい場合は8をセットします。初期値の0 は10進数を表します。
intval関数の構文
$result = intval('88888', 0);
第2引数の違いによる、結果の変化をサンプルで確認してみましょう。
整数に変換する値 はいずれも文字列の「77」ですが、実行結果は 変換のための基数 に応じて10進数・8進数・16進数でキャストされている事が確認できます。
PHPで文字列を浮動小数点数型へキャストする
浮動小数点数型へ変換を行うには(float)
または(double)
を用います。この二つはどちらも同じです。
$result = (float)'88888.888';
浮動小数点数の注意事項
割り算をすると浮動小数点数になりますが、浮動小数点数は複雑な算術演算をする際に誤差が生じる為、精度の高い数値を扱う場合には、任意精度数学関数とGMP
関数を利用する事をお勧めします。
任意精度数学関数とGMP関数については、また改めてご紹介させて頂きますが、浮動小数点数の不正確さをサンプルと共に簡単にご紹介させて頂きます。
下記サンプルでは、ランダムな整数を 1/10 にした値を加算してく処理を10000000回繰り返しています。
正しい結果では、整数の1/10の値となるはずですが、比較するとその不正確さが明らかです。
