2008年08月21日

PHPで指数形式を浮動小数点表示に変換する方法

mysqlのfloat型のカラムに小数点のデータを入力すると、selectしたとき指数形式で表示されます。

例:
入力 0.000123
表示 1.23E-4

これを、浮動小数点表示に変更するには、sprintf関数を使用しますが、桁数によっていは小数点以下の桁に余分な0がついてしまうことがあります。

$val = sprintf("%.7f", 1.23E-4);    // 小数点以下7桁に揃える
echo $val;
0.0001230  <- 右端の0はいらない
$val = sprintf("%.7f", 1.23E-3);    // 小数点以下7桁に揃える
echo $val;
0.0012300  <- 右端の0はいらない


余分な0を取るため、ereg_replace関数を使用します。

$val = sprintf("%.7f", 1.23E-4);          // 小数点以下7桁に揃える
$val = ereg_replace("0+$", '', $val);  // 後ろの連続する0を削除
echo $val;
0.000123  <- 右端の0が取れる

しかし、1.23E+4のような整数の場合、小数点が残ってしまいます。

$val = sprintf("%.7f", 1.23E+4);          // 小数点以下7桁に揃える
$val = ereg_replace("0+$", '', $val);   // 後ろの連続する0を削除
echo $val;
12300.    <- 小数点が残る

整数の場合は、小数点を削除するようにします。

$val = sprintf("%.7f", 1.23E+4);          // 小数点以下7桁に揃える
$val = ereg_replace("0+$", '', $val);   // 後ろの連続する0を削除
$val = ereg_replace("\.$", '', $val);     // 後ろの小数点を削除
echo $val;
12300    <- 小数点が取れる
タグ:どなん
posted by ラクサス at 17:26| Comment(3) | TrackBack(0) | web | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
var_dump(1.23E-4, floatval('1.23E-4'));

などはいかがでしょうか。
Posted by at 2012年08月10日 17:46
ereg_replace関数はrtrim関数で代用できますね。
ベンチマークは取っていないので断定は出来ませんが、正規表現を使用しない分こちらの方が高速でしょう。

$val = sprintf('%.7f', 1.23E+4); // 小数点以下7桁に揃える
$val = rtrim($val, '0'); // 後ろの連続する0を削除
$val = rtrim($val, '.'); // 後ろの小数点を削除
echo $val;

---

また、ereg系の正規表現関数はもはや非推奨であるということについても言及しておきます。
PHP5.3以降ではpreg系を利用しましょう。

$val = sprintf('%.7f', 1.23E+4); // 小数点以下7桁に揃える
$val = preg_replace('/0+$/', '', $val); // 後ろの連続する0を削除
$val = preg_replace('/\.$/', '', $val); // 後ろの小数点を削除
echo $val;
Posted by sounisi5011 at 2015年05月23日 00:26
右端の'0'と'.'の削除なら

rtrim(rtrim('0.0012300', '0'), '.')

でもできます。
Posted by at 2015年10月11日 11:13
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/105109533
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。