txqz memo

小数点以下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を実装している例がいくつか見つかったので、需要がなかったわけでもないみたいだけど。