数値を整形する《逆引き》

記事上広告

数値の整形とは、数値に三桁区切りを指定したり、小数点の桁指定を行ったりすることです。

整形には「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$d”, 整数);
System.out.printf(“%1$f”, 小数);

数値を三桁区切りにし出力する

System.out.printf(“%1$,d”, 整数);
System.out.printf(“%1$,f”, 小数);

整数を指定した桁で揃えて出力する[但し、桁数が足りない場合は空白もしくは0で埋める]

System.out.printf(“%1$桁指定d”, 整数);
System.out.printf(“%1$0桁指定d”, 整数);

小数部分を指定した桁で揃えて出力する[但し、桁数が足りない場合は0で埋める]

System.out.printf(“%1$.桁指定f”, 小数);

記述例

赤字の部分が整形を行っている書式となります。

数値をそのまま出力する(小数は桁数が増える)

System.out.printf(“整数を表示: %1$d“, 123456);
System.out.printf(“小数を表示: %1$f“, 123.456);

数値を三桁区切りにし出力する

System.out.printf(“三桁区切り: %1$,d“, 1234567);
System.out.printf(“三桁区切り: %1$,f“,123456.789);

整数を指定した桁で揃えて出力する[但し、桁数が足りない場合は空白もしくは0で埋める]

System.out.printf(“空白埋め桁ぞろえ: %1$6d“, 123);
System.out.printf(“  0埋め桁ぞろえ: %1$06d“,123);

小数部分を指定した桁で揃えて出力する[但し、桁数が足りない場合は0で埋める]

System.out.printf(“%1$.4f“, 12.3);

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$d”, 整数);
String 変数名 = String.format(“%1$f”, 小数);

数値を三桁区切りにし文字列として取得する

String 変数名 = String.format(“%1$,d”, 整数);
String 変数名 = String.format(“%1$,f”, 小数);

整数を指定した桁で揃えて文字列として取得[但し、桁数が足りない場合は空白もしくは0で埋める]

String 変数名 = String.format(“%1$桁指定d”, 整数);
String 変数名 = String.format(“%1$0桁指定d”, 整数);

小数部分を指定した桁で揃えて文字列として取得[但し、桁数が足りない場合は0で埋める]

String 変数名 = String.format(“%1$.桁指定f”, 小数);

記述例

赤字の部分が整形を行っている書式となります。

数値をそのまま文字列として取得する(小数は桁数が増える)

String a = String.format(“整数を表示: %1$d“, 123456);
String b = String.format(“小数を表示: %1$f“, 123.456);

数値を三桁区切りにし文字列として取得する

String c = String.format(“三桁区切り: %1$,d“, 1234567);
String d = String.format(“三桁区切り: %1$,f“,123456.789);

整数を指定した桁で揃えて文字列として取得[但し、桁数が足りない場合は空白もしくは0で埋める]

String e = String.format(“空白埋め桁ぞろえ: %1$6d“, 123);
String f = String.format(“  0埋め桁ぞろえ: %1$06d“,123);

小数部分を指定した桁で揃えて文字列として取得[但し、桁数が足りない場合は0で埋める]

String g = String.format(“%1$.4f“, 12.3);

サンプル

実行例

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引数を利用する

関連記事

なし

スポンサーリンク
レクタングル