怎么写一个函数输入一个数字参数,输出为大写中文数字(例:输入12058.45,输出为:壹万贰仟零伍拾捌元肆角伍分)?各位有谁能指点在下,多谢啦!!!

解决方案 »

  1.   

    我建议你分两步写,判断是否有.  点前和点后 分两步写
    使用 String.length 来判断后面的单位是什么。比如说.前一位就是元
    然后用String.substring 来取数字跟中文字符兑换,建议兑换换算用字符串进行
      

  2.   


    import java.lang.Math;class money {
    // 调试时用main函数
    public static void main(String args[]) {
    money mon = new money();
    System.out.println(mon.NumToRMBStr(-11.11));
    System.out.println(mon.NumToRMBStr(11.11));
    } String HanDigiStr[] = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆",
    "柒", "捌", "玖" }; String HanDiviStr[] = new String[] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟",
    "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万",
    "拾", "佰", "仟" }; String PositiveIntegerToHanStr(String NumStr) { // 输入字符串必须正整数,只允许前导空格(必须右对齐),不宜有前导零
    String RMBStr = "";
    boolean lastzero = false;
    boolean hasvalue = false; // 亿、万进位前有数值标记
    int len, n;
    len = NumStr.length();
    if (len > 15)
    return "数值过大!";
    for (int i = len - 1; i >= 0; i--) {
    if (NumStr.charAt(len - i - 1) == ' ')
    continue;
    n = NumStr.charAt(len - i - 1) - '0';
    if (n < 0 || n > 9)
    return "输入含非数字字符!"; if (n != 0) {
    if (lastzero)
    RMBStr += HanDigiStr[0]; // 若干零后若跟非零值,只显示一个零
    // 除了亿万前的零不带到后面
    // if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) ) //
    // 如十进位前有零也不发壹音用此行
    if (!(n == 1 && (i % 4) == 1 && i == len - 1)) // 十进位处于第一位不发壹音
    RMBStr += HanDigiStr[n];
    RMBStr += HanDiviStr[i]; // 非零值后加进位,个位为空
    hasvalue = true; // 置万进位前有值标记 } else {
    if ((i % 8) == 0 || ((i % 8) == 4 && hasvalue)) // 亿万之间必须有非零值方显示万
    RMBStr += HanDiviStr[i]; // “亿”或“万”
    }
    if (i % 8 == 0)
    hasvalue = false; // 万进位前有值标记逢亿复位
    lastzero = (n == 0) && (i % 4 != 0);
    } if (RMBStr.length() == 0)
    return HanDigiStr[0]; // 输入空字符或"0",返回"零"
    return RMBStr;
    } String NumToRMBStr(double val) {
    String SignStr = "";
    String TailStr = "";
    long fraction, integer;
    int jiao, fen; if (val < 0) {
    val = -val;
    SignStr = "负";
    }
    if (val > 99999999999999.999 || val < -99999999999999.999)
    return "数值位数过大!";
    // 四舍五入到分
    long temp = Math.round(val * 100);
    integer = temp / 100;
    fraction = temp % 100;
    jiao = (int) fraction / 10;
    fen = (int) fraction % 10;
    if (jiao == 0 && fen == 0) {
    TailStr = "整";
    } else {
    TailStr = HanDigiStr[jiao];
    if (jiao != 0)
    TailStr += "角";
    if (integer == 0 && jiao == 0) // 零元后不写零几分
    TailStr = "";
    if (fen != 0)
    TailStr += HanDigiStr[fen] + "分";
    } // 下一行可用于非正规金融场合,0.03只显示“叁分”而不是“零元叁分”
    // if( !integer ) return SignStr+TailStr; return "¥" + SignStr + PositiveIntegerToHanStr(String.valueOf(integer))
    + "元" + TailStr;
    }}
      

  3.   

    答:楼主,在最近的CSDN的JAVA版中,已经有几位都发帖问这个问题。而且回帖中,各种程序都有,请楼主搜一下,就会有许多。
      

  4.   

    public class MoneyUtil{ final static String[] MONEYNUMBER =  {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    final static String[] MONEYUNIT =  {"分","角","元","万","亿"};
            final static String ZHENG = "整";
            final static String[] MONEYMULTIPLE = {"","拾","佰","仟"}; public static String moneyConvertToCapital(String sMoney){
    String sMoneyCapital = "";
            String sMoneyCapitalZheng = "";
    String[] dt=Conve.SplitString(sMoney,".");
    int flagIndex = 0;      //MONEYUNIT位置标识
    if(dt==null||dt.length!=2) return "";
    int length = dt[0].length();
                    if(length>12) return "数字太大!!!";
                    if(dt[1].length()>2)
                      dt[1] = dt[1].substring(0,2);
                    if(dt[1].length()<2)
                      dt[1] = String.valueOf(Integer.parseInt(dt[1])*10+100).substring(1); if(dt[1].equals("00")&&!dt[0].equals("0")) {//零分零角
    flagIndex = 2;
    sMoneyCapital = ZHENG;
    } else if (dt[1].substring(1,2).equals("0")) {//零分
    flagIndex = 1;
    sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(0,1))] + MONEYUNIT[flagIndex];
    flagIndex = 2;
    } else { //非零分
    sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(1,2))] + MONEYUNIT[flagIndex];
    flagIndex = 1;
    if ((dt[1].substring(0,1)).equals("0")) {//零角、非零分
    sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(0,1))] + sMoneyCapital;
    flagIndex = 2;
    }else{ //非零角、非零分
    sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(0,1))] + MONEYUNIT[flagIndex] + sMoneyCapital;
    flagIndex = 2;
    }
    }
    if(!dt[0].equals("0")) {//整数位不为0
    int iTemp = 0;
    boolean flagSin = false;//是否出现1标志
    boolean flagPre = false;//是否前一位出现0标志
                int j = 4;
                int m = 1;
                int temp = 0;
                int unit  = 2;
                boolean moneyUnit = false;
                for(int i=length;i>=1;i--){
    if(m%5==0){
                        m = 1;
                        iTemp = 0;
                        moneyUnit = true;
                        unit++;
                    }
                    temp = Integer.parseInt(dt[0].substring(i-1,i));
                    if((m%j)==1){//是个位
                      if(temp!=0){
                        if(moneyUnit){
                         // if(!flagPre)
                            sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ;
                            moneyUnit = false;
                        }
                        sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng;
                        flagSin = false;
                        flagPre = false;
                      }else{
                        if(i==length) flagSin = true;
                        flagPre = true;
                      }
                    }else{//不是个位
                        if(temp==0){
                            if(!flagPre){
                                sMoneyCapitalZheng = MONEYNUMBER[0] + sMoneyCapitalZheng;
                            }else{
                            }
                             flagPre = true;
                        }else{
                                if(moneyUnit){
                                  if(!flagPre)
                                    sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ;
                                  else if(flagPre&&!flagSin)
                                    sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ;
                                  else if(flagPre&&flagSin)
                                    sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ;
                                    //                              unit++;
                                  moneyUnit = false;
                                  sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng;
                                  flagSin = false;
                                  flagPre = false;
                                }else{
                                      if(!flagPre){
                                        sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng;
                                      }else{
                                        sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp]  + sMoneyCapitalZheng;
                                      }
                                      flagPre = false;
                                      flagSin = false;
                                }
                        }
                    }
                    iTemp++;
                    m++;
         }
            }
    if(!sMoneyCapitalZheng.equals(""))
                      return sMoneyCapitalZheng + MONEYUNIT[2] + sMoneyCapital;
                    else
                      return sMoneyCapital;
    } public static String billNo(int billno,int len){
                    if(billno>100000) return "单据超过5位!!!";
                    long date=System.currentTimeMillis();
                    java.sql.Date today = new java.sql.Date(date);
                    String[] dt=Conve.SplitString(String.valueOf(today),"-");
                    if (dt==null||dt.length!=3) return null;
                    String result = dt[0]+dt[1];
                    result = result + String.valueOf(len+billno).substring(1);
                    return result;   }  //用","拆分金额数(三位一撇,如"4826111.26"-->4,826,111.26)
      public static final String splitFeeAmount(String str) {
          String str1=str;
          String str2="";
          String str3="";
          if (str.indexOf(".")>0) {
            str1=str.substring(0,str.indexOf("."));
            str2=str.substring(str.indexOf("."));
          }
          while (str1.length()>3) {
            str3=","+str1.substring(str1.length()-3)+str3;
            str1=str1.substring(0,str1.length()-3);
          }
          str=str1+str3+str2;
          return str;
      }
      public static void main(String args[]){
         System.out.println("value is : " + moneyConvertToCapital("4028.9"));
              System.out.println("billno is : " + billNo(11,100000));
      }}
      

  5.   

    答:http://topic.csdn.net/u/20080525/13/cfdc5d96-2440-47b2-b5bd-8b1d590eed95.html
      

  6.   


    public class moneyTest

    public static void main(String[] args)
    {
    String str = "";
    String di[] = {"","拾","百","千","万","亿"};

    String unum[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    int n=0;//判断是否过十万
    int y = 0;////判断是否过亿
    int i = 1;
    int lastnum = 0;//保存上一个位数
    int num = 1000001011;//要转换的数
    int a[]=new int[14];
    boolean flag=true;
    boolean flag2=true;//判断万位是否都为0标志
        boolean flag3=true;
    int num3 = num;
    while(flag3)
    {
                 if((num3/10)==0)
     flag3=false;
     else 
     flag3=true;
     a[i]= num3%10;
     num3 = num3/10;
     i++;
        }
    while(flag)
    {  
    if(a[5]==0&&a[6]==0&&a[7]==0&&a[8]==0)
    flag2 = false;//判断万位是否都为0

    if(n>=5){
    n=1;
    }
    if((num%10)!=0){//判断中间是否有两个零
    if(y==8)
    {
    str = "亿" + str;
    di[n]="";
    }
    str =  unum[num%10] + di[n] + str;
    }
    else
    {
        if(y==8)str = "亿" + str;
    else if(n==4&&flag2){

    str = "万" + str;
    }
    else
    {
    if((lastnum%10)!=0)
    str = unum[num%10] + str;
    }
    } if((num/10)==0)
    flag=false;
    else  flag=true;

    lastnum = num;
    num = num/10;
    n++;
    y++;
    }
    System.out.println(str);
    }

    }呵呵
      

  7.   

    import java.math.BigDecimal;   
      
    public class ConvertNumber {   
      /** 定义数组存放数字对应的大写 */  
      private final static String[] STR_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };   
      
      /** 定义数组存放位数的大写 */  
      private final static String[] STR_MODIFY = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };   
      
      /**  
       * 转化整数部分  
       *   
       * @param tempString  
       * @return 返回整数部分  
       */  
      private static String getInteger(String tempString) {   
        /** 用来保存整数部分数字串 */  
        String strInteger = null;//     
        /** 记录"."所在位置 */  
        int intDotPos = tempString.indexOf(".");   
        int intSignPos = tempString.indexOf("-");   
        if (intDotPos == -1)   
          intDotPos = tempString.length();   
        /** 取出整数部分 */  
        strInteger = tempString.substring(intSignPos + 1, intDotPos);   
        strInteger = new StringBuffer(strInteger).reverse().toString();   
        StringBuffer sbResult = new StringBuffer();   
        for (int i = 0; i < strInteger.length(); i++) {   
          sbResult.append(STR_MODIFY[i]);   
          sbResult.append(STR_NUMBER[strInteger.charAt(i) - 48]);   
        }   
           
        sbResult = sbResult.reverse();   
        replace(sbResult, "零拾", "零");   
        replace(sbResult, "零佰", "零");   
        replace(sbResult, "零仟", "零");   
        replace(sbResult, "零万", "万");   
        replace(sbResult, "零亿", "亿");   
        replace(sbResult, "零零", "零");   
        replace(sbResult, "零零零", "零");   
        /** 这两句不能颠倒顺序 */  
        replace(sbResult, "零零零零万", "");   
        replace(sbResult, "零零零零", "");   
        /** 这样读起来更习惯. */  
        replace(sbResult, "壹拾亿", "拾亿");   
        replace(sbResult, "壹拾万", "拾万");   
        /** 删除个位上的零 */  
        if (sbResult.charAt(sbResult.length() - 1) == '零' && sbResult.length() != 1)   
          sbResult.deleteCharAt(sbResult.length() - 1);   
        if (strInteger.length() == 2) {   
          replace(sbResult, "壹拾", "拾");   
        }   
        /** 将结果反转回来. */  
        return sbResult.toString();   
      }   
      
      /**  
       * 转化小数部分 例:输入22.34返回叁肆  
       *   
       * @param tempString  
       * @return  
       */  
      private static String getFraction(String tempString) {   
        String strFraction = null;   
        int intDotPos = tempString.indexOf(".");   
        /** 没有点说明没有小数,直接返回 */  
        if (intDotPos == -1)   
          return "";   
        strFraction = tempString.substring(intDotPos + 1);   
        StringBuffer sbResult = new StringBuffer(strFraction.length());   
        for (int i = 0; i < strFraction.length(); i++) {   
          sbResult.append(STR_NUMBER[strFraction.charAt(i) - 48]);   
        }   
        return sbResult.toString();   
      }   
      
      /**  
       * 判断传入的字符串中是否有.如果有则返回点  
       *   
       * @param tempString  
       * @return  
       */  
      private static String getDot(String tempString) {   
        return tempString.indexOf(".") != -1 ? "点" : "";   
      }   
      
      /**  
       * 判断传入的字符串中是否有-如果有则返回负  
       *   
       * @param tempString  
       * @return  
       */  
      private static String getSign(String tempString) {   
        return tempString.indexOf("-") != -1 ? "负" : "";   
      }   
      
      /**  
       * 将一个数字转化为金额  
       *   
       * @param tempNumber 传入一个double的变量  
       * @return 返一个转换好的字符串  
       */  
      public static String numberToChinese(double tempNumber) {   
        java.text.DecimalFormat df = new java.text.DecimalFormat("#.#########");   
        String pTemp = String.valueOf(df.format(tempNumber));   
        StringBuffer sbResult = new StringBuffer(getSign(pTemp) + getInteger(pTemp) + getDot(pTemp) + getFraction(pTemp));   
        return sbResult.toString();   
      }   
      
      public static String numberToChinese(BigDecimal tempNumber) {   
        return numberToChinese(tempNumber.doubleValue());   
      }   
      
      /**  
       * 替代字符  
       *   
       * @param pValue  
       * @param pSource  
       * @param pDest  
       */  
      private static void replace(StringBuffer pValue, String pSource, String pDest) {   
        if (pValue == null || pSource == null || pDest == null)   
          return;   
        /** 记录pSource在pValue中的位置 */  
        int intPos = 0;   
        do {   
          intPos = pValue.toString().indexOf(pSource);   
          /** 没有找到pSource */  
          if (intPos == -1)   
            break;   
          pValue.delete(intPos, intPos + pSource.length());   
          pValue.insert(intPos, pDest);   
        } while (true);   
      }   
      
      /**  
       * @param args  
       */  
      public static void main(String[] args) {   
        System.out.println(numberToChinese(1230400567.8934));   
      }