[Java] 数字フォーマット(お金表示及び小数点以下表示)
こんにちは。明月です。
この投稿はJavaで数字フォーマット(お金表示及び小数点以下表示)に関する説明です。
プログラム内で数字を扱う時にお金表示、つまり千単位でコンマがある表示を設定することが必要な時があります。
お金の場合は「0」が多い数字値だし、コンマ(,)表示がなければ迷う単位が多いからよく使うフォーマット変換だと思います。
Javaは「int」や「double」、「float」タイプを「String」タイプに変換する時には「DecimalFormat」クラスを利用します。
import java.text.DecimalFormat;
public class Main {
// 実行関数
public static void main(String[] args) {
// お金表示 (3桁ずつ「,」を表示する。)
DecimalFormat formatter = new DecimalFormat("#,##0");
// intタイプ
int data = 1000000000;
// intタイプからStringタイプにフォーマットによって変換
String ret = formatter.format(data);
// コンソール出力
System.out.print("#,##0 - ");
// 結果は1,000,000,000
System.out.println(ret);
// 小数点以下2桁まで表示(小数点以下がない場合、0.00で表示する。)
DecimalFormat formatter2 = new DecimalFormat("#,##0.00");
// doubleタイプ
double data2 = 10000000d;
// doubleタイプからStringタイプにフォーマットによって変換
ret = formatter2.format(data2);
// コンソール出力
System.out.print("#,##0.00 - ");
// 結果は10,000,000.00 (小数点以下が表示する。)
System.out.println(ret);
// 小数点以下2桁まで表示(小数点以下がない場合には表示しない。)
DecimalFormat formatter3 = new DecimalFormat("#,##0.##");
// doubleタイプからStringタイプにフォーマットによって変換
ret = formatter3.format(data2);
// コンソール出力
System.out.print("#,##0.## - ");
// 結果は1,000,000,000 (小数点以下が表示しない。)
System.out.println(ret);
// doubleタイプ
double data3 = 1000.123d;
// doubleタイプからStringタイプにフォーマットによって変換
ret = formatter2.format(data3);
// コンソール出力
System.out.print("#,##0.00 - ");
// 結果は1,000.12
System.out.println(ret);
// doubleタイプからStringタイプにフォーマットによって変換
ret = formatter3.format(data3);
// コンソール出力
System.out.print("#,##0.## - ");
// 結果は1,000.12
System.out.println(ret);
// doubleタイプ
double data4 = 1000.1d;
// doubleタイプからStringタイプにフォーマットによって変換
ret = formatter2.format(data4);
// コンソール出力
System.out.print("#,##0.00 - ");
// 結果は1,000.10 (小数点以下が1桁だけとフォーマットが2桁までなければ0なので表示する。)
System.out.println(ret);
// doubleタイプからStringタイプにフォーメットによって変換する。
ret = formatter3.format(data4);
// コンソール出力
System.out.print("#,##0.## - ");
// 結果は1,000.10
System.out.println(ret);
}
}
上の例で「#」はあれば表示するし、なければ表示しないことだし、「0」はなかったらデフォルトで「0」を表示するということでフォーマット設定になります。
そうすれば、上は小数点2桁までの設定でしだが、3桁になるとどうなるでしょうか?
public class Main {
public static void main(String[] args) {
// フォーマット設定
DecimalFormat formatter = new DecimalFormat("#,##0.##");
// doubleタイプで小数点3桁設定
double data2 = 0.127d;
// doubleタイプからStringタイプにフォーマットによって変換する。
String ret = formatter.format(data2);
// コンソール出力
System.out.println(ret);
}
}
四捨五入になって「0.127」から「0.13」になりました。
でも、状況によって四捨五入じゃなく、切り捨てする時もあります。その時にはフォーマットだけじゃなく、Mathクラスを利用して計算するか、BigDecimalタイプに変換して切り捨て関数で計算するかの方法があります。
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
// フォーマット設定
DecimalFormat formatter = new DecimalFormat("#,##0.##");
// doubleタイプで小数点3桁設定
double data = 0.127d;
// データを100を乗算して小数点以下を切り捨てする。
// そのデータからまた100を割算する。
double data2 = Math.floor(data * 100) / 100;
// doubleタイプからStringタイプにフォーマットによって変換
String ret = formatter.format(data2);
// コンソール出力
System.out.println(ret);
// doubleタイプをBigDecimalタイプに変換する。
BigDecimal data3 = new BigDecimal(data);
// 小数点2桁まで切り捨てする。
data3 = data3.setScale(2, BigDecimal.ROUND_DOWN);
// BigDecimalタイプからStringタイプにフォーマットによって変換
ret = formatter.format(data3);
// コンソール出力
System.out.println(ret);
}
}
個人的にBigDecimalを使うとメモリ使用がありますが、Math.floorの場合はoverflowエラー可能性があるので、BigDecimalタイプに変換して切り捨てする方が良いと思います。
ここまでJavaで数字フォーマット(お金表示及び小数点以下表示)に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
「Devlopment note / Java」の他投稿
- [Java] Jsonタイプのデータを使う方法(Gsonライブラリ)2020/03/11 00:30:15
- [Java] Base64をエンコード、デコードする方法2020/03/09 10:24:01
- [Java] cmdコマンドを実行するための方法2020/03/06 18:01:10
- [Java] メール(javax.mail)を発送する方法2020/03/05 20:07:49
- [Java] クラス複製(Clonable, Reflection)2020/03/05 00:03:19
- [Java] シリアライズ(直列化: Serializable)2020/03/03 00:03:33
- [Java] StringBuilderとStringBufferの差異2020/03/02 07:52:22
- [Java] Compare関数を使う方法2020/02/29 03:00:00
- [Java] 数字フォーマット(お金表示及び小数点以下表示)2020/02/28 03:00:00
- [Java] サーブレット環境で現在の実行ディレクトリを取得する方法2020/02/27 03:00:00
- [Java] 日本語をユニコードに変換して、ユニコードから日本語に変換する方法2020/02/26 03:00:00
- [Java] コンソールからデータを受け取る方法(System.in)2020/02/25 03:00:00
- [Java] Servlet環境でWebSocket通信中、HttpSessionを取得する方法2020/02/24 07:47:20
- [Java] WebSocketでWeb Sessionを使う方法(Broadcast)とウェブチャットの例2020/02/22 03:00:00
- [Java] WebSocket (ウェブソケット)2020/02/21 03:00:00
最新投稿
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07