SYSTEM238 / NOTES1 / PHP / 小数点以下0を削除する

NOTES1 PROG1
小数点以下0を削除する
不必要な小数点以下の0や小数点を削除する3つの方法をまとめた。

floatvalを使う方法

多分、これが本命です。一番、記述がシンプルで汎用性も高いです。

ただ、戻り値がfloat型になるので比較する際は注意してください。場合によってはstring型に変換する必要があるかもしれません。

print '12340: '.     floatval(12340);     // 12340:      12340
print '12340.00: '.  floatval(12340.00);  // 12340.00:   12340
print '123.40: '.    floatval(123.40);    // 123.40:     123.4
print '0.1234: '.    floatval(0.1234);    // 0.1234:     0.1234
print '0.123400: '.  floatval(0.123400);  // 0.123400:   0.1234
print '0.001234: '.  floatval(0.001234);  // 0.001234:   0.001234
print '0.00123400: '.floatval(0.00123400);// 0.00123400: 0.001234

rtrimを使う方法

「変換する値がstring型」で「必ず小数点があること」と条件がありますが、rtrimでできます。条件を満たさないと整数部の必要な0を削除してしまうので注意。

データベースのデータ型がNUMERIC(8,3)のときに使ったりします。

メリットとしてはstring型のデータが取得できることです。

print '12340: '.      rtrim(rtrim('12340', '0'),'.');    // 12340:      1234    NG!!
print '12340.00: '.   rtrim(rtrim('12340.00', '0'),'.'); // 12340.00:   12340
print '123.40: '.     rtrim(rtrim('123.40', '0'),'.');   // 123.40:     123.4
print '0.1234: '.     rtrim(rtrim('0.1234', '0'),'.');   // 0.1234:     0.1234
print '0.123400: '.   rtrim(rtrim('0.123400', '0'),'.'); // 0.123400:   0.1234
print '0.001234: '.   rtrim(rtrim('0.001234', '0'),'.'); // 0.001234:   0.001234
print '0.00123400: '. rtrim(rtrim('0.00123400','0'),'.');// 0.00123400: 0.001234

正規表現を使う方法

これも「string型」で「必ず小数点があること」の条件があります。

正規表現の記述を工夫すれば小数点の有無はなんとかできそうな気もしますが、実行スピードやソースの読みやすさを考えると他の方法に対してメリットが無いのでこれ以上追求していません。(他のサイトからコピペしてきてそのまま)

個人的には正規表現は最後の手段で、代替え手段があるなら正規表現は使わないほうがいいと思ってます。

print '12340: '.     preg_replace('/\.?0+$/', '', '12340').     // 12340:      1234;    NG!!
print '12340.00: '.  preg_replace('/\.?0+$/', '', '12340.00').  // 12340.00:   12340;
print '123.40: '.    preg_replace('/\.?0+$/', '', '123.40').    // 123.40:     123.4;
print '0.1234: '.    preg_replace('/\.?0+$/', '', '0.1234').    // 0.1234:     0.1234;
print '0.123400: '.  preg_replace('/\.?0+$/', '', '0.123400').  // 0.123400:   0.1234;
print '0.001234: '.  preg_replace('/\.?0+$/', '', '0.001234').  // 0.001234:   0.001234;
print '0.00123400: '.preg_replace('/\.?0+$/', '', '0.00123400').// 0.00123400: 0.001234;