数値の整形とは、数値に三桁区切りを指定したり、小数点の桁指定を行ったりすることです。
整形には「System.out.printf()」「String.format()」等が利用できます。
整形した数値を出力のみで利用する場合はSystem.out.printf()を利用します。整形した数値を文字列として使いまわしたい場合はString.format()を利用します。
また、整形は数値だけでなく、日付や文字列に対しても行えますが、この記事では数値のみ解説を行っています。
数値を整形するプログラム
整形するための書式
「System.out.printf()」や「String.format()」の第一引数では決められた整形したいデータは書き方(=書式)に従って記述を行う。書式に従わなかった場合は実行時エラーとなります。書式内で半角スペースなどを入れることはできませんので注意してください。
書式の詳細説明を閲覧したい方は、下の文字を押下してください。
書式で必ず記述するのは%と変換データ形式だけですが、今回のサンプルでは引数も入れています。以下が書式の記述形式です。[]は省略できる部分となります。
公式サイトでの書式 | %[argument_index$][flags][width][.precision]conversion |
---|---|
書式の説明 | %[引数の番号$][フラグ][最小桁数][.最大桁数]変換データ形式 |
以下の書式は「三桁区切り」「10桁で揃える(桁が足りない場合は0埋め)」を整数で行う場合の例です。
System.out.printf(“%1$,010d”,1234567); | ||||
% | 1$ | , | 010 | d |
書式スタート[必須] | 第一引数を利用する | 三桁区切り | 10桁で桁ぞろえ(0埋め)※1 | 整数(10進数)[必須] |
% | 引数の番号$ | フラグ | 最小桁数 | 変換データ形式 |
※1 三桁区切りと桁ぞろえが指定されている場合、,の数も桁に含まれます(例:1,234は5桁とみなされる)
以下の書式は「三桁区切り」「小数を4桁で揃える(桁が足りない場合は0埋め)」を小数で行う場合の例です。
System.out.printf(“%1$,.4f”,1234567.89); | ||||
% | 1$ | , | .4 | f |
書式スタート[必須] | 第一引数を利用する | 三桁区切り | 小数部分を4桁で桁ぞろえ(0埋め) | 小数(10進数)[必須] |
% | 引数の番号$ | フラグ | 最大桁数 | 変換データ形式 |
System.out.printf()を利用する
printf()メソッドは、第一引数に出力する文字列を、第二引数以降には整形するデータを指定します。
出力時には改行※2は行われませんので、必要に応じて改行は別で記述を行ってください。
※2 フラグでnを指定すると改行できますが、桁数指定ができなくなります。
文法 | System.out.printf(“書式” , 整形したい数値); |
---|---|
記述例 | System.out.printf(“%1$,010d” , 123456); |
※記述例では、数値を「三桁区切り」「10桁に満たない場合は0埋めで桁ぞろえ」した文字列を出力しています。
数値をそのまま出力する(小数は桁数が増える)
System.out.printf(“%1$f”, 小数);
数値を三桁区切りにし出力する
System.out.printf(“%1$,f”, 小数);
整数を指定した桁で揃えて出力する[但し、桁数が足りない場合は空白もしくは0で埋める]
System.out.printf(“%1$0桁指定d”, 整数);
小数部分を指定した桁で揃えて出力する[但し、桁数が足りない場合は0で埋める]
記述例
赤字の部分が整形を行っている書式となります。
数値をそのまま出力する(小数は桁数が増える)
System.out.printf(“小数を表示: %1$f“, 123.456);
数値を三桁区切りにし出力する
System.out.printf(“三桁区切り: %1$,f“,123456.789);
整数を指定した桁で揃えて出力する[但し、桁数が足りない場合は空白もしくは0で埋める]
System.out.printf(“ 0埋め桁ぞろえ: %1$06d“,123);
小数部分を指定した桁で揃えて出力する[但し、桁数が足りない場合は0で埋める]
String.format()を利用する
String.format()はSystem.out.printf()と違い、出力は行わず、整形した結果を文字列として取得できます。
文法 | String 変数名 = String.format(“書式” , 整形したい数値); |
---|---|
記述例 | String str = String.format(“%1$,010d” , 123456); |
※記述例では、数値を「三桁区切り」「10桁に満たない場合は0埋めで桁ぞろえ」した文字列をstr変数内に格納しています。
以下の説明は、出力と変数格納の違いはありますが、書式などはSystem.out.printf()と同じです。
数値をそのまま文字列として取得する(小数は桁数が増える)
String 変数名 = String.format(“%1$f”, 小数);
数値を三桁区切りにし文字列として取得する
String 変数名 = String.format(“%1$,f”, 小数);
整数を指定した桁で揃えて文字列として取得[但し、桁数が足りない場合は空白もしくは0で埋める]
String 変数名 = String.format(“%1$0桁指定d”, 整数);
小数部分を指定した桁で揃えて文字列として取得[但し、桁数が足りない場合は0で埋める]
記述例
赤字の部分が整形を行っている書式となります。
数値をそのまま文字列として取得する(小数は桁数が増える)
String b = String.format(“小数を表示: %1$f“, 123.456);
数値を三桁区切りにし文字列として取得する
String d = String.format(“三桁区切り: %1$,f“,123456.789);
整数を指定した桁で揃えて文字列として取得[但し、桁数が足りない場合は空白もしくは0で埋める]
String f = String.format(“ 0埋め桁ぞろえ: %1$06d“,123);
小数部分を指定した桁で揃えて文字列として取得[但し、桁数が足りない場合は0で埋める]
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
class SampleCode04{ public static void main(String[] args){ /* %[argument_index$][flags][width][.precision]conversion %[引数指定$][フラグ指定][最小桁数][.最大桁数]変換するデータ */ //そのまま出力 System.out.printf("整数を表示: %1$d", 123456); System.out.println(); System.out.printf("小数を表示: %1$f", 123.456); System.out.println(); //三桁区切り System.out.printf("三桁区切り: %1$,d", 1234567); System.out.println(); System.out.printf("三桁区切り: %1$,f",123456.789); System.out.println(); //整数を桁ぞろえ System.out.printf(" 0埋め桁ぞろえ: %1$06d",123); System.out.println(); System.out.printf("空白埋め桁ぞろえ: %1$6d", 123); System.out.println(); //小数を桁ぞろえ System.out.printf("%1$.4f", 12.3); System.out.println(); //記事中の表でのサンプルをString.format()で利用 String a = String.format("%1$,010d",1234567); System.out.println(a); String b = String.format("%1$,.4f",1234567.89); System.out.println(b); } } |
実行例
C:\work>javac SampleCode04.java
C:\work>java java SampleCode04
整数を表示: 123456
小数を表示: 123.456000
三桁区切り: 1,234,567
三桁区切り: 123,456.789000
0埋め桁ぞろえ: 000123
空白埋め桁ぞろえ: 123
12.3000
01,234,567
1,234,567.8900
補足
以下のように記述すると、複数の数値を同時に整形することもできます。また、引数を利用する順番は順不同でも可能です。
System.out.printf(“%2$,dと%1$,dを足すと%3$,dです。” , 10501 , 876, 10501 + 876); | ||
%2$,d | %1$,d | %3$,d |
第2引数を利用する | 第1引数を利用する | 第3引数を利用する |
関連記事
なし