Javaで基本操作シリーズその3、もう、前回にもちょっと出てきてしまっているのですが、数字の表現。
数字のカンマつき、0を前に付ける等といった話は、Java1.5でチョー便利機能、String.formatとSystem.out.printfが入ったんで、それ以前、それ以降(つまり、2つの機能を使った場合)で分けて話たほうがいいとおもいます。
ということで、まず、Java1.5以前から
■Java1.5以前-NumberFormatを使って。。
●概要
java.text.NumberFormatっていうのがあって、そいつを使うと、前0とか、小数点以下何桁とかできます。
・前0は、setMinimumIntegerDigits(最小桁数)メソッドです。この場合、最小桁数に満たない桁には前に0がつきます。
・カンマの指示は、setGroupingUsed(true)メソッドで、カンマつき、trueをfalseにすると、カンマなしになります。
・小数点の桁数を揃えるにはsetMinimumFractionDigits(桁数)メソッドです。この桁数以下の場合、0がつきます。
・小数点以下を丸めるにはsetMaximumFractionDigits(桁数)メソッドです。それ以上の小数点以下の桁数だと、四捨五入します。
これらの指示の仕方は
1.NumberFormat nf = NumberFormat.getInstance();でオブジェクト取得
(newではない)
2.上記メソッドを使っていろいろ設定(複数組み合わせてもOK)
3.String test = nf.format(値);で、値を2の条件で変換した結果
(文字列)を返します
・新しく設定しなおしたい場合は、またNumberFormat.getInstance()して、オブジェクトを取得しなおしてね!じゃないと前の設定が生きてるよ(^^)
くわしくは、このページが分かりやすいと思う
http://www.geocities.jp/h2fujimura/appendix/text/NumberFormat/index.html
●サンプルソース
こんなかんじ。
import java.util.*; import java.text.*; /* * 数字のフォーマットテスト */ public class test { /* * メイン処理(呼び出し元) */ public static void main(String[] args) { // まず、フォーマット操作をしたいなら、 // NumberFormatをもらわないといけない NumberFormat nf = NumberFormat.getInstance(); // 数字のあたまに0を付ける nf.setMinimumIntegerDigits(5); // 最低5桁 String test1 = nf.format(5); System.out.println("0をつける :" + test1); // カンマを消したい nf.setGroupingUsed(false); test1 = nf.format(5); System.out.println("カンマを消す :" + test1); // 小数点を指定した桁数に必ずする // 最低小数点以下3桁=2桁以下なら0がつく nf.setMinimumFractionDigits(3); String test2 = nf.format(25.4); System.out.println("3桁 :" + test2); // 小数点をある桁以下、捨てる // もう一回つくりなおし NumberFormat nf2 = NumberFormat.getInstance(); // 最低小数点以下2桁=3桁以上捨てる nf2.setMaximumFractionDigits(2); // 切捨てのケース String test3 = nf2.format(25.423); System.out.println("3桁 25.423 :" + test3); // 切り上げのケース String test4 = nf2.format(25.428); System.out.println("3桁 25.428 :" + test4); } } |
(上記 < > ¥は本当は半角です)
■Java1.5-String.format等を使って。。
●概要
しかし、Java1.5に、System.out.printf,String.formatが入ったことで、こんな面倒なことをしなくてよくなった(なお、System.out.printfと書いているが、別にSystem.out.である必要はなく、PrintStreamなら、printfメソッドは使える)。
これらは、Cと同じく、書式を指定すれば、その形で出力してくれたり、文字列に変換してくれる。
くわしくは、ここ
J2SE 5.0の新機能
第4回 書式付き入出力機能(1)――Javaのprintf
http://www.javaworld.jp/technology_and_programming/-/21082-1.html
●サンプルソース
こんなかんじ。
public class test { /** * Java1.5でのテスト */ public static void main(String[] args) { int su = 5; // 数字のフォーマット String test1 = String.format("%03d",su); System.out.println("String.formatの利用:"+ test1); //printfでいきなり System.out.printf("printf 直接指定:%03d¥n",5); } } |
(上記 < > ¥は本当は半角です)
ということで、1.5は便利ではあるので、1.5ベースでのプログラムというのは、どんどん増えてくると思われる。そーすると、1.4,1.3と1.5の混在となるわけだが、この場合の問題点ということについては、また今度、別の機会で書きたいと思います。