Advertisement

将数字型货币转换为中文型货币 java货币中文转化

阅读量:

public class MoneyUtil {
private final static String[] CN_Digits = {"零","壹","贰","叁","肆","伍",
"陆","柒","捌","玖"};
}

/**

  • 将数字型货币转换为中文型货币
  • @param moneyValue
  • 字符串形式的金额,小数部分,将多于3位部分舍去,不做四舍五入
  • @return
    */
    public static String CNValueOf(String moneyValue) {
    //使用正则表达式,去除前面的零及数字中的逗号
    String value = moneyValue.replaceFirst("^0+", "");
    value = value.replaceAll(",", "");
    //分割小数部分与整数部分
    int dot_pos = value.indexOf('.');
    String int_value;
    String fraction_value;
    if (dot_pos == -1) {
    int_value = value;
    fraction_value = "00";
    } else {
    int_value = value.substring(0, dot_pos);
    fraction_value = value.substring(dot_pos + 1, value.length())
    + "00".substring(0, 2);//也加两个0,便于后面统一处理
    }

int len = int_value.length();
if (len > 16) {
return "值过大";
}
StringBuffer cn_currency = new StringBuffer();
String[] CN_Carry = {"", "万", "亿", "万"};
// 数字分组处理
int cnt = len / 4 + (len % 4 == 0 ? 0 : 1);
// 左边第一组长度
int partLen = len - (cnt - 1) * 4;
String partValue;
boolean bZero = false;
String curCN;
for (int i = 0; i < cnt; i++) {
// 分割数字
partValue = int_value.substring(0, partLen);
int_value = int_value.substring(partLen);
curCN = Part2CN(partValue, !bZero && ! curCN.equals("零"));
// 处理连续零的情况
if (bZero && ! curCN.equals("零")) {
cn_currency.append("零");
bZero = false;
}
if (! curCN.equals("零")) {
cn_currency.append(curCN);
cn_currency.append(CN_Carry[cnt - 1 - i]);
}
}
// 设置默认单位
partLen = 4;
// 处理小数部分
int fv1, fv2;
try {
fv1 = Integer.parseInt(fraction_value.substring(0, 1));
} catch (NumberFormatException e) {
fv1=0;
}
try {
fv2=Integer.parseInt(fraction_value.substring(1,2));
} catch(NumberFormatException e){
fv2=0;
}
if(fv1+fv2==0){
cn_currency.append("整");
} else{
cn_currency.append(CN_Digits[fv1]).append("角");
cn_currency.append(CN_Digits[fv2]).append("分");
}
return cn_currency.toString();

/**

  • 将一组数字(不多于四个)转化成中文表示
  • 作者:wallimn 时间:2009-4-11 下午07:41:25
  • 博客:http://wallimn.iteye.com<br/>
  • 参数:
  • @param partValue 字符串形式的数字
  • @param bInsertZero 是否在前面添加零
  • @return
    */
    private static String Part2CN(String partValue,boolean bInsertZero) {
    //使用正则表达式,去除前面的0
    partValue = partValue.replaceFirst("^0+", "");
    int len = partValue.length();
    if (len == 0)
    return "零";
    StringBuffer sbResult = new StringBuffer();
    int digit;
    String[] CN_Carry = new String[] { "", "拾", "佰", "仟" };
    for (int i = 0; i < len; i++) {
    digit = Integer.parseInt(partValue.substring(i, i + 1));
    if (digit != 0) {
    sbResult.append(CN_Digits[digit]);
    sbResult.append(CN_Carry[len - 1 - i]);
    } else {
    // 若不是最后一位,且下不位不为零,追加零
    if (i != len - 1
    && Integer.parseInt(partValue.substring(i + 1, i + 2)) != 0)
    sbResult.append("零");
    }
    }
    if(bInsertZero && len!=4)sbResult.insert(0, "零");
    return sbResult.toString();
    }
    public static void main(String[] args) {
    System.out.println(CNValueOf("123456789.01"));
    }
    }

全部评论 (0)

还没有任何评论哟~