私とtips

最新4件を表示します。このリソース群の時系列順リストタイトルリスト、またこのリソースのAtom表現RSS1.0表現も参照できます。

小数点以下n桁の表示

doubleやfloatの値をそのままSystem.out.prinlt()すると小数点以下16桁とか出てきて見にくいので、これを小数点以下2桁くらいにできないものかと検索すると、たとえばJava(SE) API 逆引き辞典が引っかかるので、それに則って書くと:

double before = 0.3456789012345678;
double after = new BigDecimal(String.valueOf(before)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(after);
//=> 0.35

長い。

ここで思い直してみると、小数点以下2桁に丸めた数値をdoubleのまま扱う必要があるのかということに気づく。特に今回の場合、「doubleをprint()すると小数点以下16桁も出てきて長いから小数点以下2桁だけ表示させたい」わけで、ただ小数点以下2桁までを表現した文字列が得られればいい。なので:

double before = 0.3456789012345678;
String after = String.format("%.2f", before);
System.out.println(after);
//=> 0.35

formatメソッドが使えるのはJava5.0ことJava1.5からなので、そこだけ罠。

ていうか、sprintf()みたいなのはほかのLLでは当たり前のように用意されていると思うのに、Javaでの提供が1.5までずれ込んだのはなぜだろう。需要がなかったのかなー。検索してみたら独自にsprintfを実装している例がいくつか見つかったので、需要がなかったわけでもないみたいだけど。

タグ
Tips

Re: PHP コード最適化 Best Practices 63+

PHPコードを最適化するTipsがはてブで話題になっている。前に似たようなものを見てそのときも思ったのだけれども、いくつかよく分からない項目が紛れている。前回ははてブのコメントにちょろっと書いたけど、2回目なのでちゃんとエントリにしておく。

17. $row['id'] は $row[id] より7倍速い。

これは最適化プラクティスというレベルの話ではない。idが定数でないなら、ここでE_NOTICEが出る。そうなると、idを文字列"id"として再評価しないといけなくなるから、遅くなるのも当たり前だ。

<?php
error_reporting(E_ALL);
$row = array(
     "id" => 12
);
echo $row[id];
Notice: Use of undefined constant id - assumed 'id' in /home/youzaka/temp/rowid.php on line 6
12

これが$row[id]でなくて$row->idなら分かるけど、なんでそもそも$row[id]と書こうだなんて発想が出てきたのか、当時よく分からなかった。error_reportingの初期値がE_ALL ^ E_NOTICEだから、引用符なしで書いても問題なく表示されてしまうのだった。

49. DB に入れる値なら GET より POST を使おう。(パフォーマンスが上がる)

データベースに値を入れるならPOSTメソッドを使うのが本来の姿で、パフォーマンスがあがるからGETじゃなくてPOSTを使うという考え方は危険だと思う。GETとかPOSTとかのメソッドの名前からそこら辺は察してほしい。

以下、ツッコミでなくマイ補足知識。

02. echo の方が print より速い。

調べてみると、echoやprintは関数ではなく式であるという点は共通だが、echoは戻り値を返さないのに対しprintは常にTRUEを返すそうで。戻り値の評価の分だけわずかにprintの方が遅くなるのでしょうね。ほとんど無視できるような気もするけど。

あと、「n倍速い」というのが強調されているけど、それが環境によらないものなのか、どれくらいの誤差があるのか、絶対値でどれくらい違うのかが気になった。

タグ
Tips

Googleのパーソナライズド検索を無効にする

Googleのパーソナライズ検索をログイン状態で無効にするやりかたをGoogle Maniaで知った。いやぁこれは助かる。Googleの検索履歴のページを見ると、

検索した情報を検索履歴に登録しない場合は、このページの [一時停止] ボタンをクリックします。 [再開] をクリックするまで、検索内容は検索履歴に保存されず、パーソナライズド検索の検索結果にも反映されません。

て書いてあるのだけれども、 [一時停止] ボタン[再開]も見あたらないしどうしようかと思っていたのだった。これはGoogleの罠なのか???

タグ
tips

それっぽいプレゼンテーションを作る

そこらを見て回って良いと思ったプレゼンの仕方のまとめ。そろそろ卒研発表も近いのでぜひ踏まえておきたい。

あともんたメソッドとかスギヤマメソッドとか。

先日の英語の講義で高橋メソッドを使ったプレゼンをやったら褒められた。

タグ
Tips
© 2001-2008 Chisa YOUZAKA. Some rights reserved.