整数値のカンマ区切り(文字列→文字列版)

数値(整数、小数)を表す文字列に対し、小数点以下の桁数をそろえたり、 整数部にカンマ区切りを加えたりするユーティリティクラスです。 カンマ区切りを含む書式化については、java.text.DecimalFormat などが便利に使えますが、それらはDouble→Stringが対象で、 元から文字列のものを書式化するのはオーバーヘッドがかかるので、別途専用クラスを作ってみました。

package test;

public class CommaUtil {
    /**
     * String型で指定された数値データに、小数点以下の桁数をそろえるために0
     * を追加したり、整数部にカンマを追加したりします。
     * @param src 処理対象の文字列(double型として認識できること)
     * @param scale 小数部の桁数
     * @return
     */
    public static String formatNumber(String src, int scale){
        if(src == null){
            return null;
        }
        src = src.trim();
        StringBuffer srcbuf = new StringBuffer(src);

        /* まず整数部、小数部の桁数を求める */
        int seiketa, shouketa;
        int dotloc = src.indexOf('.');
        if(dotloc == -1){
            /* 小数点がない */
            seiketa = src.length();
            shouketa = 0;
        } else {
            /* その他(先頭が小数点の場合も含む) */
            seiketa = dotloc;
            shouketa = src.length() - dotloc - 1;
        }

        /* shouketaがscaleに満たない場合、右に0を足す */
        if(shouketa == 0){
            srcbuf.append('.');
        }
        for(int i=shouketa; i<scale; i++){
            srcbuf.append('0');
        }
        /* カンマ区切り */
        if(seiketa > 3){
            int startIndex = seiketa % 3;
            if(startIndex == 0){
                startIndex = 3;
            }
            for(int i=startIndex; i<seiketa; i+=3){
                srcbuf.insert(i++, ',');
            }
        }
        /* 先頭が小数点の場合、先頭に0をつける */
        if(dotloc == 0){
            srcbuf.insert(0, '0');
        }
        return srcbuf.toString();
    }

    /* テストのメイン */
    public static void main(String[] args){
        System.out.println(CommaUtil.formatNumber("1.23", 2));
        System.out.println(CommaUtil.formatNumber("21.23", 2));
        System.out.println(CommaUtil.formatNumber("321.23", 2));
        System.out.println(CommaUtil.formatNumber("4321.23", 2));
        System.out.println(CommaUtil.formatNumber("54321.23", 2));
        System.out.println(CommaUtil.formatNumber("654321.23", 2));
        System.out.println(CommaUtil.formatNumber("7654321.23", 2));
        System.out.println(CommaUtil.formatNumber("87654321.23", 2));
        System.out.println(CommaUtil.formatNumber("987654321.23", 2));
        System.out.println(CommaUtil.formatNumber("1987654321.23", 2));
        System.out.println(CommaUtil.formatNumber("1.23", 3));
        System.out.println(CommaUtil.formatNumber("1.23", 4));
        System.out.println(CommaUtil.formatNumber(".23", 2));
        System.out.println(CommaUtil.formatNumber(".23", 3));
        System.out.println(CommaUtil.formatNumber("123", 2));
        System.out.println(CommaUtil.formatNumber("123", 3));
    }
}

Java kowaza Top

(first uploaded 2004/03/19 last updated (not ever), URANO398)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル