ITPub博客

首页 > 应用开发 > Java > 数字转中文的方法

数字转中文的方法

原创 Java 作者:gxbgxb 时间:2007-12-25 17:22:43 0 删除 编辑
public static final String EMPTY = "";

public static final String ZERO = "零";

public static final String ONE = "壹";

public static final String TWO = "贰";

public static final String THREE = "叁";

public static final String FOUR = "肆";

public static final String FIVE = "伍";

public static final String SIX = "陆";

public static final String SEVEN = "柒";

public static final String EIGHT = "捌";

public static final String NINE = "玖";

public static final String TEN = "拾";

public static final String HUNDRED = "佰";

public static final String THOUSAND = "仟";

public static final String TEN_THOUSAND = "万";

public static final String HUNDRED_MILLION = "亿";

public static final String YUAN = "元";

public static final String JIAO = "角";

public static final String FEN = "分";

public static final String DOT = ".";

private static MoneyFormatTest formattest = null;//定义一个静态的MoneyFormatTest类让它空

//建了两个HashMap数的散列表。

private HashMap chineseNumberMap = new HashMap();

private HashMap chineseMoneyPattern = new HashMap();

/*NumberFormat 是所有数值格式的抽象基类。 该类提供了格式化和分析数值的接口。 NumberFormat 也提供了确定哪个语言环境具有数值格式以及它们名字的方法。

NumberFormat 帮助格式化和分析任何语言环境的数值。 代码可以完全不依赖于语言环境中关于十进制小数点、千进位分隔符的约定,甚至关于使用特别的十进制数字或数值格式是否为小数的约定。

*/

private NumberFormat numberFormat = NumberFormat.getInstance();//为了格式化当前 Locale 的数值,使用下列静态工厂方法之一。

//构造方法

private MoneyFormatTest() {

numberFormat.setMaximumFractionDigits(4);

numberFormat.setMinimumFractionDigits(2);

numberFormat.setGroupingUsed(false);

//在该散列表中映射指定的 键 到指定的 值 。

chineseNumberMap.put("0", ZERO);

chineseNumberMap.put("1", ONE);

chineseNumberMap.put("2", TWO);

chineseNumberMap.put("3", THREE);

chineseNumberMap.put("4", FOUR);

chineseNumberMap.put("5", FIVE);

chineseNumberMap.put("6", SIX);

chineseNumberMap.put("7", SEVEN);

chineseNumberMap.put("8", EIGHT);

chineseNumberMap.put("9", NINE);

chineseNumberMap.put(DOT, DOT);

chineseMoneyPattern.put("1", TEN);

chineseMoneyPattern.put("2", HUNDRED);

chineseMoneyPattern.put("3", THOUSAND);

chineseMoneyPattern.put("4", TEN_THOUSAND);

chineseMoneyPattern.put("5", TEN);

chineseMoneyPattern.put("6", HUNDRED);

chineseMoneyPattern.put("7", THOUSAND);

chineseMoneyPattern.put("8", HUNDRED_MILLION);

}

//如果是formatter等于空,也就是如果是第一次载入的就实例化SimpleMoneyFormat类,返回SimpleMoneyFormat的一个对象。

public static MoneyFormatTest getInstance() {

if (formattest == null)

formattest= new MoneyFormatTest();

return formattest;

}

//重载format方法格式的规范传入不同类型的参数,返回String类型

public String format(String moneyStr) {

checkPrecision(moneyStr);

String result;

result = convertToChineseNumber(moneyStr);

result = addUnitsToChineseMoneyString(result);

return result;

}

public String format(double moneyDouble) {

return format(numberFormat.format(moneyDouble));

}

public String format(int moneyInt) {

return format(numberFormat.format(moneyInt));

}

public String format(long moneyLong) {

return format(numberFormat.format(moneyLong));

}

public String format(Number moneyNum) {

return format(numberFormat.format(moneyNum));

}

private String convertToChineseNumber(String moneyStr) {

String result;

StringBuffer cMoneyStringBuffer = new StringBuffer();//定义字符串缓冲区实现可变字符序列

for (int i = 0; i < moneyStr.length(); i++) {

cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1)));//添加字符串到字符串缓冲区。

}

//拾佰仟万亿等都是汉字里面才有的单位,加上它们

int indexOfDot = cMoneyStringBuffer.indexOf(DOT);

int moneyPatternCursor = 1;

for (int i = indexOfDot - 1; i > 0; i--) {

cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY + moneyPatternCursor));

moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor + 1;

}

引 :http://www.javadby.com/Javarenzhengkaoshi/20071119/3128_2.html

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/790981/viewspace-995761/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 引用 抽象+接口
请登录后发表评论 登录
全部评论
  • 博文量
    20
  • 访问量
    337506