Java:数値を3桁ごとのカンマ区切りの文字列にする
【課題】
前回は数値文字列を数値に変換してBigDecimalを生成しましたが,今回はその逆を行います。
BigDecimalクラスの数値を3桁ごとにカンマで区切った数値文字列に変換します。
また,小数点を含む値についても対応します。
ただ,整数値の場合はStringクラスのformatメソッドを使って以下のように書くことで実現できてしまいます。
仕事でプログラミングを行っている人で,これで要求を満たすならこちらを使いましょう。
BigDecimal dec = new BigDecimal("12345678"); long value = dec.longValue(); String valueStr = String.format("%1$,3d", value); System.out.println(valueStr); |
【概要】
カンマの挿入は,少数点以上は下の桁から数えて3桁ごとに挿入する必要があります。
逆に小数点以下は,上の桁から3桁ごとにカンマを挿入します。
これを行うロジックはいくつか考えられますが,今回は以下の手順で行います。
(1)BigDecimalの値を文字列化して,数値文字列を小数点で区切って2つに分ける。
(2)少数点以上の数値文字列を文字配列に変換する。
(3)文字配列の最後(下の桁)から数字を1文字づつ取り出しStringBuilderに追加する。同時に3文字ごとにカンマを入れる。
※このときのStringBuilderの内容は,下の桁→上の桁の順に数字が並んでいます。
(4)負の値の場合は最後にマイナスを追加する。
(5)StringBuilderの内容をreverse()メソッドで反転させる。
※以降は小数点以下の桁があった場合の処理です。
(6)StringBuilderに小数点を挿入する。
(7)((1)で作成した)小数点以下の数値文字列を文字配列に変換する。
(8)文字配列の最初(上の桁)から数字を1文字づつ取り出しStringBuilderに追加する。同時に3文字ごとにカンマを入れる。
(9)StringBuilderの内容を文字列に変換する。
【実装】
上記手順をコードにすると以下のようになります。
import java.math.BigDecimal;
//------------------------------------------------------------------ StringBuilder buff = new StringBuilder(valueStr.length()); if (0 < valueStrs.length && !valueStrs[0].isEmpty()) { if (1 < valueStrs.length && !valueStrs[1].isEmpty()) { |
【著作権表記】上記コードを含む本ブログのプログラムコードは,私的利用可,商用利用可,改変しての利用可です。利用の際に作者に許諾を得る必要はありません。
■関連書籍をAmazonで検索:[Java]
●増補改訂版 Java言語で学ぶデザインパターン入門(kindle版)
←この記事が役に立ったという方はクリックお願いします。
| 固定リンク
「Java」カテゴリの記事
- Java:Reader/Writerにおけるclose()メソッド呼び出しの流儀(2015.06.29)
- Java:例外が起こったときに実行されるコードとされないコード(2015.03.31)
- Java:前回作成したコードの処理速度を比較する(2015.03.15)
- Java:数値を3桁ごとのカンマ区切りの文字列にする(2015.03.02)
- Java:全角の数値文字列を数値として受け付ける(2015.01.19)