PHPで小さな数値を科学表記に変換させない
mikeda
mikeda
ATOMRSS
  • コード求むID: 318
  • 登録日時:  2008/08/17 17:34
  • 最終更新日時: 2008/09/07 20:39
  • アクセス数: 510
  • タグ:  php5 科学表記
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加

PHP5で非常に大きい数値、小さい数値を出力しようとすると
自動的に科学表記に変換されてしまいます。

php -v
PHP 5.2.6
...
php -r 'print 0.00001;'
1.0E-5

この変換を抑止する方法をだれかご存知ありませんか?



自然数の場合はそのまま出力したいので、
printf("%f", $num);
に逃げづらくてちょっと困ってます。
toStringメソッドのようなものをいじれたりできればと思うのですが。


よろしくお願いします!!

コメント

  • ゲスト
  • 1:ゲスト
  • 2008/08/17 22:42

printf を使わないとしょうがないんじゃないかな
integer の場合分けをするなら
printf(is_int($n)?"%d\n":"%f\n", $n);
とか

GJ

数値の誤差を考えるとbcmathを使用するのが妥当かとおもいます。
http://jp2.php.net/manual/ja/book.bc.php

  • GoodJob
  • 0

  • ゲスト
  • 3:ゲスト
  • 2008/08/21 15:31

文字列として出力するのは?

php -r 'print "0.00001";'

  • GoodJob
  • 0

みなさんいろいろありがとうございます。返事遅くなってすみません。

よくよく見てみると処理対象に整数型はなく、処理時点で全て実数型の配列になっていました。
文字列として出力もできなかったので、printfに逃げました。
小数部分がないものは全て整数としました。

たしかこんな感じで。

<?php
  $i = 1.00001;
  $fmt = ($i-(int)$i) ? "%s\n" : "%d\n";
  printf($fmt, $i);
?>

  • GoodJob
  • 0

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

関連ソースコード・ノウハウを登録

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ブックマークコメント