decimal型とは
「パック無し浮動小数点」は、各桁の数値を1文字ずつ文字列として格納します。
浮動小数点(FLOAT型・DOUBLE型)では演算に誤差が生じる場合があるため、金額など正確な演算を行うには、パック無し浮動小数点(DECIMAL型・NUMERIC型)を使用します。
decimalの場合、桁数を(M,D)の形で指定します。
内訳は以下の通りです。
M…扱う少数の最大桁数
D…小数点以下の桁数
例えば、(10, 3)という桁数を指定したら、全体で最大10桁、小数点以下は3桁、という解釈になります。
仮に、itemというテーブル
カラム | データ型 | 照合順序 | 属性 | インデックス その他 |
---|---|---|---|---|
item_id | int(10) | UNSIGNED | primary_key auto_increment |
|
item_name | text | utf8_general_ci | ||
detail | text | utf8_general_ci | ||
price | decimal(10,3) | UNSIGNED | ||
image | varchar(50) | utf8_general_ci | ||
ctg_id | tinyint(3) | UNSIGNED |
があったとして、
priceというカラム(データ型decimal(10,3)と設定していた場合)に、
商品データで価格が129.800円のものをSQL文で挿入するときは、
$sql = " INSERT INTO item ( "
." item_name, "
." detail, "
." price, "
." image, "
." ctg_id "
." )VALUES( "
." 'jacket', "
." 'シックな中にもエレガンスを感じさせる、ロロピアーナならではの素晴らしい色合いです。', "
." 129.800, "
." 'jacket01.jpg', "
." 1 "
." )";
のようになります。
気をつけたいのは、decimal(10,3)という設定をした場合、挿入する値の小数点以下は『 . 』で区切るという点と、10桁に達しなくてもOK(最大10桁なので)という点です。
挿入する値を『 , 』で区切ると反映されないようです。
decimal型データの値のMySQLデータベースへの挿入例 | |
---|---|
OK | NG |
129.800 | 129,800 |
PHPで『 . 』の部分を『 , 』に切り替えて表示するには、number_format( )関数で可能です。
number_format
説明
$number
[, int $decimals
= 0 ] )$number
, int $decimals
= 0 , string $dec_point
= "." ,string $thousands_sep
= "," )この関数は 1 つか 2 つもしくは 4 つのパラメータを受け取ります (3 つはありません) :
パラメータが 1 つだけ渡された場合、 number
は千位毎にカンマ (",") が追加され、 小数なしでフォーマットされます。
パラメータが 2 つ渡された場合、number
は decimals
桁の小数の前にドット (".") 、 千位毎にカンマ (",") が追加されてフォーマットされます。
パラメータが 4 つ全て渡された場合、number
はドット (".") の代わりに dec_point
が decimals
桁の小数の前に、千位毎にカンマ (",") の代わりに thousands_sep
が追加されてフォーマットされます。
パラメータ
number
-
フォーマットする数値。
decimals
-
小数点以下の桁数。
dec_point
-
小数点を表す区切り文字。
thousands_sep
-
千位毎の区切り文字。
返り値
number
をフォーマットした結果を返します。
変更履歴
バージョン | 説明 |
---|---|
5.4.0 | この関数は、 dec_point や thousands_sep に複数バイトを指定できるようになりました。 それまでは、複数のバイトを指定しても先頭の 1 バイトしか使われませんでした。 |
第3引数を使う場合は、第4引数を使わないとしても、第4引数も記述しなければいけません。
第3引数を記述していて、第4引数を記述しないと、
『Wrong parameter count for number_format( ) in』というエラーが出ます。
例:数字の中のピリオドをコンマにする
$price = 129.800;
$new_price = ($price, 3, ",", ",");
⇩ 詳しくは下記サイトへ
・PHPで数字にカンマを付ける方法 | PHPの逆引きリファレンス
今回はこのへんで。