検索

キーワード


【Java】カンマ区切り?ゼロ埋め? 数値をフォーマット変換する方法!

  • 公開日:2020-08-14 18:02:42
  • 最終更新日:2021-01-25 16:50:29
【Java】カンマ区切り?ゼロ埋め? 数値をフォーマット変換する方法!

こんにちは。駆け出しプログラマーの松倉です!

ここでは、数値をフォーマット処理をする方法について紹介・解説します。

プログラミング未経験の方、Javaについて勉強している方、これから勉強したいと思っている方の参考になれば幸いです!

関連記事リンク:【Java】浮動小数点の誤差はなぜ発生するの? その原因と対処方法を解説!【Java】変数とは?定数とは?詳しく解説! 変数の列挙型、代入、型変換、型推論の使い方についても紹介します!【Java】リテラルってなに? リテラル(数値、文字、文字列)の使い方を解説!

   

数値をフォーマットする方法

int型や double型などのデータに対して通貨記号 $ をつけた金額表示、通貨セパレータ,カンマ区切り、頭からのゼロ埋めなど様々なフォーマット処理を行いたい場合があります。

Javaではこれらの数値のフォーマット処理のために便利なクラスがあります。 


この記事ではフォーマット処理について以下の解説をします。

数値のフォーマットの変更方法 NumberFormatクラス

独自のフォーマットの作成方法 DecimalFormatクラス

・ロケールの指定方法

数値のゼロ埋め

 

数値のフォーマットの変更方法 NumberFormatクラス

NumberFormatクラスは、数値のフォーマットを変更するクラスです。

特定のフォーマットが既に準備されており、「 java.text.NumberFormat」をインポートすることで使用することができます。

NumberFormatクラスには、フォーマットとして以下のメソッドが用意されています。

             NumberFormatクラスのgetterメソッド

NumberFormatクラスは abstract(抽象)クラスであるためインスタンス化できませんが、いくつかの static(静的)メソッドが用意されており、予め用意されたフォーマットのインスタンスを利用できます。


また、取得したインスタンスに対して以下のようなセッターメソッドを利用することで、フォーマットをカスタマイズすることもできることを覚えておきましょう!

          NumberFormatクラスのsetterメソッド


 NumberFormatクラスを利用して数値をフォーマット処理したコードを確認しましょう!

import java.text.NumberFormat;

public class Sample1 {
	public static void main(String[] args) {
		NumberFormat curFormat = NumberFormat.getCurrencyInstance(); //通貨
		NumberFormat intFormat = NumberFormat.getIntegerInstance();//整数
		NumberFormat perFormat = NumberFormat.getPercentInstance(); //パーセント
		NumberFormat comFormat = NumberFormat.getNumberInstance(); //カンマ区切り
		
		System.out.println(curFormat.format(123.45));
		System.out.println(intFormat.format(123.456));
		System.out.println(perFormat.format(1.234));
		System.out.println(comFormat.format(123456789));
	}
}

 

実行結果:

123
123
123%
123,456,789

NumberFormatクラスを使うことでフォーマットの処理が簡単にできました!



独自のフォーマットの作成方法 DecimalFormatクラス

DecimalFormatクラスはデフォルトで準備されたフォーマットを使わず独自にフォーマットを作成して利用します。

このクラスは「 java.text.DecimalFormat」をインポートすることで使用することができます。

DecimalFormatクラスのインスタンスを生成する際に引数としてフォーマットを文字列で設定します。

独自フォーマットの設定は以下の文字列を組み合わせることで作成します。

              DecimalFormatクラスの独自フォーマットの設定で使う文字

 

DecimalFormatクラスの使い方

DecimalFormat 変数 = new DecimalFormat(独自フォーマット);
変数.format(); 


DecimalFormatクラスを利用して数値をフォーマット処理したコードを確認しましょう!

import java.text.DecimalFormat;

public class Sample2 {
	public static void main(String[] args) {
		DecimalFormat format01 = new DecimalFormat("000,000.###");
		DecimalFormat format02 = new DecimalFormat("-000,000.00");
		DecimalFormat format03 = new DecimalFormat("-###.00%");

		System.out.println(format01.format(1234567.89));
		System.out.println(format02.format(123456.7890));
		System.out.println(format03.format(12.34567));
	}
} 


実行結果:

1,234,567.89
-123,456.79
-1234.57%

自由に様々な組み合わせができるため、独自のフォーマットをカスタマイズしたい場合はこちらを使いましょう!



ロケールの指定方法

NumberFormatクラス、DecimalFormatクラスを使用する場合、出力結果は現在設定しているロケールに深く依存します。 

ロケールはその地域の言語体系、通貨体系、数値体系を指して言います。

日本の場合、通貨フォーマットを使用すると通貨記号は \ が表示され、米国である場合、通貨フォーマットを使用すると通貨記号は $ が表示されます。

 

NumberFormatオブジェクトを生成する際、getNumberInstanceなどファクトリメソッドの引数にロケールを指定することでそのフォーマットにおけるロケールを変更することもできます。

現在のロケールの表示やロケールの変更を行う以下のメソッドが用意されています。

         ロケールの表示や変更を行うメソッド


ロケールの表示やロケールの変更のコードを確認しましょう。

import java.text.NumberFormat;
import java.util.Locale;

public class Sample3 {
	public static void main(String[] args) {
		System.out.println(Locale.getDefault()); //ロケールの取得

		Locale.setDefault(Locale.US); //USに設定
		NumberFormat value1 = NumberFormat.getCurrencyInstance();
		System.out.println(value1.format(100000));
		Locale.setDefault(Locale.UK); //UKに設定
		NumberFormat value2 = NumberFormat.getCurrencyInstance();
		System.out.println(value2.format(100000));
	}
}


実行結果:

ja_JP
$100,000.00
£100,000.00



数値のゼロ埋め

数値を画面などに出力する際、あらかじめ決められた桁数に満たない分だけゼロを付与する処理のことを「ゼロ埋め」と言います。

カレンダーのような月日を常に 2桁で出力し、1~ 9のような 1桁は左側にゼロ埋めされます 。

また会員番号や電話番号のような固定番号は、常に固定の桁数で扱いたいため頭に 0を付与してゼロ埋めします。

ある値をゼロ埋めしたいときは NumberFormatクラス、さらに条件によって桁数を変えたいときは DecimalFormatクラスを用いると簡単にできます。

整数だけでなくあらかじめ小数点が表示されている場合でもそれを含めた桁数が指定した値になります。


NumberFormatクラスの場合

整数値部分の桁数の指定方法

変数.setMinimumIntegerDigits(指定値) //最小値
変数.setMaximumIntegerDigits(指定値)//最大値


小数点以下の桁数の指定方法

変数.setMinimumFractionDigits(指定値)//最小値
変数.setMaximumFractionDigits(指定値)//最大値


DecimalFormatクラスの場合

DecimalFormat 変数 = new DecimalFormat(独自フォーマット);

使用例)
// 0(ゼロ)が指定されている桁に該当する数値が無い場合はゼロ埋めされる
DecimalFormat formatter = new DecimalFormat("000,000.000000");

※フォーマットの指定方法は、こちらを参照してください。


NumberFormatクラスと DecimalFormatクラスでゼロ埋め処理のサンプルコードで確認しましょう。

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Sample4 {
	public static void main(String[] args) {
		NumberFormat format1 = NumberFormat.getCurrencyInstance();
		Format1.setMinimumFractionDigits(3); // 小数点以下の最小値
		Format1.setMaximumFractionDigits(3); // 小数点以下の最大値
		Format1.setMinimumIntegerDigits(5); // 整数値の最小値
		Format1.setMaximumIntegerDigits(5); // 整数値の最大値

		System.out.println(format1.format(1234.56789));

		DecimalFormat format2 = new DecimalFormat("000,000.000000");
		
		System.out.println(format2.format(1234.56789));
	}
}


実行結果:

01,234.568
001,234.567890 

NumberFormatクラスでは整数部分は 5桁指定したため頭に 0が一つ付与され、小数部分は 3桁指定したため 7が四捨五入された値が出力されています。

DecimalFormatクラスでは整数部分は  6桁指定したため頭に 0が二つ付与され、小数部分は 6桁指定したため 末尾に 0が付与された値が出力されています。


まとめ 

数値をフォーマット処理をする方法について解説しました。

NumberFormatクラスや DecimalFormatクラスが使えるようになると、多くのデータを扱うときに便利になると思います。

特に DecimalFormatクラス独自フォーマットの設定を覚えるまでは使いにくく不便に感じるかもしれません。

使いこなせるようになると思い通りのフォーマットが設定できて便利ですよ。

またロケールのやり方を知っておくとローカルの言語と国のルールをシステムを一度に設定できるので、調べ物が少なくなるのでぜひ覚えましょう!


関連記事リンク:【Java】浮動小数点の誤差はなぜ発生するの? その原因と対処方法を解説!【Java】変数とは?定数とは?詳しく解説! 変数の列挙型、代入、型変換、型推論の使い方についても紹介します!【Java】リテラルってなに? リテラル(数値、文字、文字列)の使い方を解説!

【著者】

松倉祥大

はじめまして。フォワードソフト株式会社の松倉です。
システムエンジニアとして働き始めたのが2020年4月です。経験や知識がない状態で入社した私は、フォワードソフトの教育研修で一からプログラミングの勉強をしました。教育研修を卒業後、Javaのプログラミングについて初学者向けの記事を共同で制作しています。
知識や経験はまだまだですが、これからいろんな職場で様々な経験しながら勉強していきたいと思っています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様