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));
}
}
|