请问如果随便给一个小写的数字,怎么能得出的结果是大写的?比如:123元,最后结果是:壹佰贰拾三元整.谁知道这个怎么换算啊?

解决方案 »

  1.   

    /**
     * 
     * <p>
     * Title: 人民币转成大写
     * </p>
     * <p>
     * Description:
     * </p>
     * <p>
     * Copyright: Copyright (c) 2004
     * </p>
     * <p>
     * Company: www.fqf.com.cn
     * </p>
     * 
     * @author 范庆丰
     * @version 1.0
     */
    public class ChangeToBig
    {    public ChangeToBig()
        {
        }
        public String hangeToBig(double value)
        {
            char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
            char[] vunit = { '万', '亿' }; // 段名表示
            char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
            long midVal = (long) (value * 100); // 转化成整形
            String valStr = String.valueOf(midVal); // 转化成字符串        String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
            String rail = valStr.substring(valStr.length() - 2); // 取小数部分        String prefix = ""; // 整数部分转化的结果
            String suffix = ""; // 小数部分转化的结果
            // 处理小数点后面的数
            if (rail.equals("00"))
            { // 如果小数部分为0
                suffix = "整";
            }
            else
            {
                suffix = digit[rail.charAt(0) - '0'] + "角"
                        + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
            }
            // 处理小数点前面的数
            char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
            char zero = '0'; // 标志'0'表示出现过0
            byte zeroSerNum = 0; // 连续出现0的次数
            for (int i = 0; i < chDig.length; i++)
            { // 循环处理每个数字
                int idx = (chDig.length - i - 1) % 4; // 取段内位置
                int vidx = (chDig.length - i - 1) / 4; // 取段位置
                if (chDig[i] == '0')
                { // 如果当前字符是0
                    zeroSerNum++; // 连续0次数递增
                    if (zero == '0')
                    { // 标志
                        zero = digit[0];
                    }
                    else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
                    {
                        prefix += vunit[vidx - 1];
                        zero = '0';
                    }
                    continue;
                }
                zeroSerNum = 0; // 连续0次数清零
                if (zero != '0')
                { // 如果标志不为0,则加上,例如万,亿什么的
                    prefix += zero;
                    zero = '0';
                }
                prefix += digit[chDig[i] - '0']; // 转化该数字表示
                if (idx > 0)
                    prefix += hunit[idx - 1];
                if (idx == 0 && vidx > 0)
                {
                    prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
                }
            }        if (prefix.length() > 0)
                prefix += '圆'; // 如果整数部分存在,则有圆的字样
            return prefix + suffix; // 返回正确表示
        }
        public static void main(String args[])
        {
            ChangeToBig a = new ChangeToBig();
            System.out.print(a.hangeToBig(120000.12));
        }
    }
      

  2.   

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.Iterator;/**
     * @author songyunpeng
     */
    public class Rmb {
    static boolean ISIGNORE = false;//参数用来设置是否忽略错误,true为忽略错误,默认为false
    static List digits = new ArrayList();
    static List setDigits = new ArrayList();
    static {
    digits.add("拾");//0:拾
    digits.add("佰");//1:佰
    digits.add("仟");//2:仟
    digits.add("萬");//,3:萬
    digits.add("拾");//4:拾萬
    digits.add("佰");//,5:佰萬
    digits.add("仟");//6:仟萬
    digits.add("亿");//,7:亿
    digits.add("拾");//8:拾亿
    digits.add("佰");//,9:佰亿
    digits.add("仟");//10:仟亿
    digits.add("兆");//11:兆
    digits.add("拾");//12:拾兆
    digits.add("佰");//,13:佰兆
    digits.add("仟");//仟兆
    // digits.add("京"); //.
    // digits.add("拾");//12:拾京
    // digits.add("佰");//,13:佰京
    // digits.add("仟");//???
    //.....
    setDigits.add("萬");
    setDigits.add("亿");
    setDigits.add("兆");
    // setDigits.add("京"); //
    //.....
    //百度搜索:个、十、百、千、万、十万、百万、千万、亿、兆(10的12次方)、京〔10的16次方)、垓、秭、穰、沟、涧、正、载、极(10的48次方)、恒河沙、阿僧示氏、(梵文译音、意思是无量)、那由他、不可思议(10的64次方)、无量数(∞)。
    }
    public String run(double moneyDb) throws Exception {
    java.text.DecimalFormat fmt = new java.text.DecimalFormat(".00");
    String moneyStr = fmt.format(moneyDb);
    if(moneyDb == 0) {
    return "零圆整";
    }
    return ConvertData(moneyStr);
    }

    // 转换RMB函数
    String ConvertData(String moneyParam) throws Exception {
    System.out.println("=====try to fmt:"+moneyParam);
    StringBuffer returnValue = new StringBuffer();
    String [] strMoneys = java.util.regex.Pattern.compile("\\.").split(moneyParam); 
    int len = strMoneys[0].length();
    if(strMoneys[0].startsWith("-")) {
    returnValue.append("负");
    len--;
    }
    strMoneys[0] = strMoneys[0].replaceFirst("-", "");
    // 判断可不可以转
    if(len>digits.size()+1) {
    if(this.ISIGNORE) {
    return moneyParam;
    }
    throw new Exception("函数:RMB出错:数字太大或太小,无法换算.");
    }
    //转整数

    for(int i = 0; i < strMoneys[0].length(); i++) {
    String value = strMoneys[0].charAt(i)+"";

    returnValue.append(Convert1Digit(value,strMoneys[0].length()-2-i));
    }

    String tmp = returnValue.toString();
    //linlin..
    java.util.regex.Pattern p = java.util.regex.Pattern.compile(".*零零.*");//("零零|零萬|零亿");
    java.util.regex.Matcher m = p.matcher(tmp);
    while(m.find()) {
    tmp = tmp.replaceAll("零零","零");
    m = p.matcher(tmp);
    }
    //lindigits
    String preDigitsName="",digitsName;
    for(int i = 0; i < setDigits.size(); i++) {
    digitsName = (String)setDigits.get(i);
    tmp = tmp.replaceAll("零"+digitsName,digitsName);
    }
    if(!setDigits.isEmpty()) {
    preDigitsName = (String) setDigits.get(0);
    }
    for(int i = 1; i < setDigits.size(); i++) {//tmp = tmp.replaceAll("亿萬","亿零");
    digitsName = (String) setDigits.get(i);
    if(tmp.matches(".*"+digitsName.concat(preDigitsName)+".*")) {
    tmp = tmp.replaceAll(digitsName.concat(preDigitsName), digitsName);
    if(digitsName != "" && !(digitsName.equals(""))) {
    tmp = tmp.replaceAll(digitsName, digitsName+"零");
    tmp = tmp.replaceAll("零零", "零");
    //System.out.println("===138");
    }
    }
    preDigitsName = digitsName;
    //java.util.regex.Pattern.matches(regex, input)
    }
    //end of lin
    if(tmp.endsWith("零")) {
    tmp = tmp.substring(0,tmp.length()-1);
    }
    tmp = tmp.concat("圆");
    if(tmp.startsWith("圆")) {
    tmp = tmp.substring(1);
    }
    //转小数
    if(strMoneys[1].equals("00")) {
    return tmp.concat("整");
    }
    else {
    String rstr = "";
    String tmpstr = strMoneys[1].substring(0, 1);
    String ret = Convert1Digit(tmpstr,-2); 
    if(ret != "零" && !(ret.equals("零"))) {
    rstr = ret.concat("角");
    }
    else if(tmp != "") {
    rstr = "零";
    }
                tmpstr = strMoneys[1].substring(1, 2);
                rstr = rstr.concat(Convert1Digit(tmpstr,-2) + "分");
    return tmp.concat(rstr);
    }


    }

    // digit为-1时是个位-2是小数位不加位名称直接返回大写数 
    private String Convert1Digit(String str,int digit) {
    StringBuffer reStr = new StringBuffer("");
    //System.out.println ("length:"+reStr.length());
    int num = java.lang.Integer.parseInt(str);

    if(digit != -2 && num == 0) {//整数对零的处理 if(digit >= 0 && setDigits.contains(digits.get(digit))) {//万位和亿位是零要念一个万或亿
    reStr.append(digits.get(digit));
    }
    else {
    reStr.append("零");
    }
    return reStr.toString();
    }
    // digit = -1 为个位
    switch(num) {//取值名称,                                      
    case 0: reStr.append("零"); break;
            case 1: reStr.append("壹"); break;
            case 2: reStr.append("贰"); break;
            case 3: reStr.append("叁"); break;
            case 4: reStr.append("肆"); break;
            case 5: reStr.append("伍"); break;
            case 6: reStr.append("陆"); break;
            case 7: reStr.append("柒"); break;
            case 8: reStr.append("捌"); break;
            case 9: reStr.append("玖"); break;
    }

    // -1为个位-2为小数,
    if(digit >= 0 ) {//取位名称
    reStr.append(digits.get(digit));
    }
    return reStr.toString();
    }

    //test===
    public static void main(String[] args) throws Exception {
    Rmb rmb = new Rmb();
    System.out.println(rmb.run(101001001));
    }
    }