<tr  height="25"> 
      <td><div align=center>总金额</div></td>
      <td>           佰  拾  万  仟  佰  拾  元  角  分</td>
      <td>¥<%=new java.math.BigDecimal(String.valueOf(sum))%></td>
    </tr><%=new java.math.BigDecimal(String.valueOf(sum))%>,这是一个带2位小数的
不固定值.要把它的大写金额按上面方式表示出来。
     琢磨好久,都不知道怎么做,恳请哪位前辈帮小弟写个方法,谢谢!

解决方案 »

  1.   

    转成字符串,确定小数点位置index,
    n = {一到十的大写} 的字符串
    m = {拾佰仟万} 的字符串
    str = ""
    for(i: index->0 )
      str = n[i位数字-1]+m[i]+str;for(i: index->length-1)
      str += n[i位数字-1]可能用javascript更好些
      

  2.   

    设这个小数是f,
    先将int n=(int)f*100;
    int i=n%10;//这是分的
    int y=n/10;//这是角的
    int x=n/100;//这是元的
    如此类推了,
    这是我的想法,如有不对请不要骂,还请其它前辈斧正!!
      

  3.   

    google里找一下没有转大写的JAVA代码
    我这里有一段用在 delphi 的 Fastreport里的代码,你可以参考一下,用java写  t_num[0] :='零';
      t_num[1] :='壹';
      t_num[2] :='贰';
      t_num[3] :='叁';
      t_num[4] :='肆';
      t_num[5] :='伍';
      t_num[6] :='陆';
      t_num[7] :='柒';
      t_num[8] :='捌';
      t_num[9] :='玖';
      t_unit1[0] := '元';
      t_unit1[1] := '万';
      t_unit1[2] := '亿';
      t_unit1[3] := '万';
      t_unit1[4] := '亿';  t_unit2[0] :='拾';
      t_unit2[1] := '佰';
      t_unit2[2] :=  '仟';
      t_unit3[0] :='角';
      t_unit3[1] :='分';  sInt :='';
      sFlt := '';
      sNegative:='';  szCurrency := FormatFloat('0.00',SUM([rsPrint2."Amount"])); // 小数点后必须有两位
      dotPos := Pos('.', szCurrency);
      szInt := Copy(szCurrency, 1, dotPos - 1);
      szFlt := Copy(szCurrency, dotPos + 1, 2);  if (szInt = '0') and (szFlt = '00') then
      begin
        RMBBig2.memo := '人民币零元整';
        exit;
      end;  szIntCount := Length(szInt);    if copy(szInt,1,1)='-' then
        begin
          szIntCount := szIntCount-1;
          szInt := copy(szInt,2,szIntCount);
          sNegative := '负';
        end;  if szInt <> '0' then // 如果整数部分为零,则不对其进行处理
      begin
        old_inx_num := 0;
        for i := 0 to szIntCount - 1 do
        begin
          inx_num := Str(Copy(szInt,szIntCount - i,1));
          if i mod 4 = 0 then
          begin // 处理 圆,万,亿
            inx_unit := Int(i / 4);
            if (inx_num > 0) then // 不是零
                //  以下判断处理诸如"壹亿圆",“壹亿万圆"
              if ((inx_unit > 0) and (inx_unit mod 2 = 0) and (sInt[1] + sInt[2] = '万')) then
                sInt := t_num[inx_num] + t_unit1[inx_unit] + copy(sInt, 3, 2 * (Length(sInt) - 1))
              else
                sInt := t_num[inx_num] + t_unit1[inx_unit] + sInt
            else // 是零
                //  以下判断处理诸如"壹拾亿圆“,"壹拾亿万圆"
              if ((inx_unit > 0) and (inx_unit mod 2 = 0) and (sInt[1] + sInt[2] = '万')) then
                sInt := t_unit1[inx_unit] + copy(sInt, 3, 2 * (Length(sInt) - 1))
              else
                sInt := t_unit1[inx_unit] + sInt  ;
          end
          else
          begin // 处理 拾,佰,仟
            inx_unit := i mod 4 - 1;
            if inx_num > 0 then // 不是零
              sInt := t_num[inx_num] + t_unit2[inx_unit] + sInt
            else // 是零
              if old_inx_num > 0 then // 前面这位不是零
                sInt := t_num[inx_num] + sInt; // 写零
              //else  忽略多个零
          end;
          old_inx_num := inx_num;
        end;
      end;    //处理小数部分
      if (szFlt <> '00') then
      begin
        for i := 0 to 1 do
        begin
          inx_num := Str(copy(szFlt,i + 1,1));
          if (inx_num > 0) then
            sFlt := sFlt + t_num[inx_num] + t_unit3[i]
          else
            if (i <> 1) then // 如果"角"为0 (分"是 0, 则忽略)
              if (sInt <> '') then // 如果整数为此时为零
                sFlt := sFlt + t_num[inx_num];
        end;
         RMBBig2.memo := sNegative + sInt + sFlt;
      end
      else
         RMBBig2.memo := sNegative + sInt + '整';
      

  4.   

    class Thousandyuan
    {
        public static void main(String arg[])
    {
    String s="51344549";
    int len=s.length();  
    int number[]={0,1,2,3,4,5,6,7,8,9};
    char word[]={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖',};
    char unit[]={' ',' ','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟'};
    int x[]=new int[20];
    for(int i=0;i<len;i++)
    {
    x[i]=s.charAt(i)-48;//'4'和4相差48
    //System.out.print(x[i]);
                for(int j=0;j<10;j++)
    {
    if(x[i]==number[j])

    if(j!=0)
    {
        System.out.print(word[j]);
        System.out.print(unit[len-i]);
    }else{
    System.out.print("零");

    }


    }
    }


    }
    };
      

  5.   

    public String numAnalize(String input) {
           String [] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
           String [] unit = {"","","拾","佰","仟","万"};
           String [] currency = {"元","角","分"};
           
           String result = "";
              String inputStr = null;
              int leng = input.length();
               int dot = -1;
               for (int i = 0; i < leng; i++) {
                 char c = input.charAt(i);
                 if (c == '.') {
                    dot = i;
                    break;
                 }
              }
              inputStr = input;
              if (dot != -1) {
                  inputStr = input.substring(0,dot);
              }
                    
            int wanCount = leng / 4 ;
            int remain = leng % 4;
            
            if (remain == 0) {
                wanCount -= 1;
            }
                    
            for (int i = 0; i < wanCount; i++) {
                if (i == 0 && remain != 0) {
                    for (int j = 0; j < remain; j++) {
                        char c = inputStr.charAt(j);
                        int pos = c - '0';
                        int pos2 = remain - j;
                        result += num[pos] + unit[pos2];
                    }
                    inputStr = inputStr.substring(remain);
                    result += unit[5];
                }
                else {
                    for (int j = 0; j < 4; j++) {
                        char c = inputStr.charAt(j);
                        int pos = c - '0';
                        int pos2 = 4 - j;
                        result += num[pos] + unit[pos2];
                    }
                    inputStr = inputStr.substring(4);
                    result += unit[5];
                }
                
                
            }
           
            for (int j = 0; j < inputStr.length(); j++) {
               char c = inputStr.charAt(j);
                int pos = c - '0';
                int pos2 = inputStr.length() - j;
                result += num[pos] + unit[pos2];
               
            }
            result += currency[0];
            
            if (dot != -1) {
                inputStr = input.substring(dot + 1);
                if (inputStr.length() > 2) {
                    if (inputStr.charAt(2) - '0' > 4) {
                        int t = inputStr.charAt(1) - '0' + 1;
                        inputStr = inputStr.charAt(0) + "" + t;
                    }
                    else {
                        inputStr = inputStr.substring(0,2);
                    }
                }
                
                for (int i = 0; i < inputStr.length(); i++) {
                    char c = inputStr.charAt(i);
                    int pos = c - '0';
                    result += num[pos] + currency[i + 1];
                } 
            }
            return result;
        }
    俺随便敲的,经过测试可以使用, 自动四舍五入
      

  6.   

    public String numAnalize(String input) {
           String [] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
           String [] unit = {"","","拾","佰","仟","万"};
           String [] currency = {"元","角","分"};
           
           String result = "";
            String inputStr = null;
            int leng = input.length();
            
            int dot = -1;
            for (int i = 0; i < leng; i++) {
                char c = input.charAt(i);
                if (c == '.') {
                   dot = i;
                    break;
                }
            }
            inputStr = input;
            if (dot != -1) {
                inputStr = input.substring(0,dot);
            }
            leng = inputStr.length();
                    
            int wanCount = leng / 4 ;
            int remain = leng % 4;
            
            if (remain == 0) {
                wanCount -= 1;
            }
                    
            for (int i = 0; i < wanCount; i++) {
                if (i == 0 && remain != 0) {
                    for (int j = 0; j < remain; j++) {
                        char c = inputStr.charAt(j);
                        int pos = c - '0';
                        int pos2 = remain - j;
                        result += num[pos] + unit[pos2];
                    }
                    inputStr = inputStr.substring(remain);
                    result += unit[5];
                }
                else {
                    for (int j = 0; j < 4; j++) {
                        char c = inputStr.charAt(j);
                        int pos = c - '0';
                        int pos2 = 4 - j;
                        result += num[pos] + unit[pos2];
                    }
                    inputStr = inputStr.substring(4);
                    result += unit[5];
                }
                
                
            }
           
            for (int j = 0; j < inputStr.length(); j++) {
               char c = inputStr.charAt(j);
                int pos = c - '0';
                int pos2 = inputStr.length() - j;
                result += num[pos] + unit[pos2];
               
            }
            result += currency[0];
            
            if (dot != -1) {
                inputStr = input.substring(dot + 1);
                if (inputStr.length() > 2) {
                    if (inputStr.charAt(2) - '0' > 4) {
                        int t = inputStr.charAt(1) - '0' + 1;
                        inputStr = inputStr.charAt(0) + "" + t;
                    }
                    else {
                        inputStr = inputStr.substring(0,2);
                    }
                }
                
                for (int i = 0; i < inputStr.length(); i++) {
                    char c = inputStr.charAt(i);
                    int pos = c - '0';
                    result += num[pos] + currency[i + 1];
                } 
            }
            return result;
        }
    sorry 丢了一句重要的赋值语句
    补上了 呵呵
      

  7.   

    算法都正确.DalinJava和pauliuyou第二个
      

  8.   

    public String numAnalize(String input) {
           String [] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
           String [] unit = {"","","拾","佰","仟","万"};
           String [] currency = {"元","角","分"};
           
           String result = "";
            String inputStr = null;
            if (input.startsWith("-") || input.startsWith("0")) {
                input = input.substring(1);
            }
            
            int leng = input.length();
            int dot = -1;
            for (int i = 0; i < leng; i++) {
                char c = input.charAt(i);
                if (c == '.') {
                   dot = i;
                    break;
                }
            }
            inputStr = input;
            if (dot != -1) {
                inputStr = input.substring(0,dot);
            }
            leng = inputStr.length();
                    
            int wanCount = leng / 4 ;
            int remain = leng % 4;
            
            if (remain == 0) {
                wanCount -= 1;
            }
                    
            for (int i = 0; i < wanCount; i++) {
                if (i == 0 && remain != 0) {
                    for (int j = 0; j < remain; j++) {
                        char c = inputStr.charAt(j);
                        int pos = c - '0';
                        if (pos == 0) {
                        if (!result.endsWith(num[0])) {
                            result += num[0];
                        }
                        continue;
                                         
                    }
                        int pos2 = remain - j;
                        result += num[pos] + unit[pos2];
                    }
                    inputStr = inputStr.substring(remain);
                    if (result.endsWith(num[0])) {
                result = result.substring(0,result.length() - 1);
            }
                    result += unit[5];
                }
                else {
                    for (int j = 0; j < 4; j++) {
                        char c = inputStr.charAt(j);
                        int pos = c - '0';
                        if (pos == 0) {
                        if (!result.endsWith(num[0])) {
                            result += num[0];
                        }
                        continue;
                                         
                    }
                        int pos2 = 4 - j;
                        result += num[pos] + unit[pos2];
                    }
                    inputStr = inputStr.substring(4);
                    if (result.endsWith(num[0])) {
                result = result.substring(0,result.length() - 1);
            }
                    result += unit[5];
                }
                
                
            }
           
            for (int j = 0; j < inputStr.length(); j++) {
               char c = inputStr.charAt(j);
                int pos = c - '0';
                if (pos == 0) {
                    if (!result.endsWith(num[0])) {
                        result += num[0];
                    }
                    continue;
                                     
                }
                int pos2 = inputStr.length() - j;
                result += num[pos] + unit[pos2];
               
            }
            if (result.endsWith(num[0])) {
                result = result.substring(0,result.length() - 1);
            }
            result += currency[0];
            
            if (dot != -1) {
                inputStr = input.substring(dot + 1);
                if (inputStr.length() > 2) {
                    if (inputStr.charAt(2) - '0' > 4) {
                        int t = inputStr.charAt(1) - '0' + 1;
                        inputStr = inputStr.charAt(0) + "" + t;
                    }
                    else {
                        inputStr = inputStr.substring(0,2);
                    }
                }
                
                for (int i = 0; i < inputStr.length(); i++) {
                    char c = inputStr.charAt(i);
                    int pos = c - '0';
                    if (pos == 0) {
                        
                        continue;
                                         
                    }
                    result += num[pos] + currency[i + 1];
                    
                } 
            }
            return result;
        }完美版 
      

  9.   

    谢谢各位前辈指点,小弟昨天晚上用了一个非常简单的方法实现了
    代码如下,不妥之处还望指正:(数值带2位小数)
    package com.system;import java.util.*;
    import java.lang.*;
    import java.io.*;
    public class SumBean
    {
    public String change(String str)
    {
            int str_length=str.length();        String mount[]={"","","","","","","","","","","","","","",""};
            for(int i=str_length,n=14;i>0;i--,n--)
            {
                mount[n]=str.substring(i-1,i);
            }        for(int i=0;i<15;i++)
    {
         if(!mount[i].equals("") && !mount[i].equals("."))
    {
          if(mount[i].equals("0"))
      mount[i]="零";
      else if(mount[i].equals("1"))
                  mount[i]="壹";
      else if(mount[i].equals("2"))
                  mount[i]="贰";
      else if(mount[i].equals("3"))
                  mount[i]="叁";
      else if(mount[i].equals("4"))
                  mount[i]="肆";
      else if(mount[i].equals("5"))
                  mount[i]="伍";
      else if(mount[i].equals("6"))
                  mount[i]="陆";
      else if(mount[i].equals("7"))
                  mount[i]="柒";
      else if(mount[i].equals("8"))
                  mount[i]="捌";
      else if(mount[i].equals("9"))
                  mount[i]="玖";
               else
       mount[i]="";
     }
     else
     mount[i]="";
    }
    String result="";
            result="      "+mount[5]+" 佰 "+mount[6]+" 拾 "+mount[7]+" 万 "+mount[8]+" 仟 "+mount[9]+" 佰 "+mount[10]+" 拾 "+mount[11]+" 元 "+mount[13]+" 角 "+mount[14]+" 分";
       return result;
        }
    }; 
      

  10.   

    刚好前几天做的一个,不过不是很完善,没有处理小数点及小数,你可以自己完成一下,整数部分可以达到千亿。另外是C#算法:class MyAlgorithms
    { private string[] big1={"零","壹","贰","参","肆","伍","陆","柒","捌","玖"};
    private string[] big2={"元","拾","百","千","万","拾","百","千","亿","拾","百","千"};
    /// <summary>
    /// convert the little number to big number,只能到千亿位。
    /// </summary>
    /// <param name="littleString"></param>
    /// <returns></returns> public string LittleToBig(string littleString)
    {

    int numLen=littleString.Length ;
    int level=0;
    string tempNum="";
    string tempValue="";
    string tempString="";
    string fullBigString="";
    string resultTemp=""; //每次提取四个字符从后面开始提取。
    for(int i=numLen-1;i>0;i-=4)
    {
    if(i>=4)
    {
    //MessageBox.Show (littleString.Substring (i-3,4)); //将一小段小写数字变成大写数字。
    tempString=littleString.Substring (i-3,4);

    }
    else
    {
    tempString=littleString.Substring (0,i+1); //MessageBox.Show (littleString.Substring (0,i+1));
                            
    } tempNum=ConvertNumToBig(tempString); if(tempNum.Length ==1 && level==0)
    {
    tempNum="零"+tempNum;   //在第一小串字符中如果个位前没有数了,则要在个位前补一个零。 }
    tempValue=big2[level*4];

    if(tempNum=="零")
    {
    resultTemp=""; }
    else
    {

    resultTemp= tempNum+tempValue;
    }
    fullBigString=resultTemp+fullBigString;
                    
    level=level+1;
    } if((fullBigString.Length ==3)&&(fullBigString.Substring (0,1)=="零"))
    {
    fullBigString=fullBigString.Substring (1,2);
    }
                return fullBigString;
    }


    /// <summary>
    /// Util function. Convert a little number string to a big number string
    /// if All if "零" 则返回一个零。否则返回对应的大写数字字符串。并且数字之间有相连
    /// 的两个或多个零的话,要变成一个零。
    /// </summary>
    /// <param name="subLittelString"></param>
    /// <returns></returns>
    private string ConvertNumToBig(string subLittleString)
    {
    string subString1=subLittleString;

    String returnString="";
    string preChar="零";     //相当于后面只有在有数字后才会再将出现的零加入到字符串中。
    string tempNumChar="";
    string tempValueChar=""; int pos=subString1.Length-1; foreach(char tempChar in subLittleString)
    {
    if(pos>0)
    tempValueChar=big2[pos];
    else
    tempValueChar="";
    pos--;                    
    tempNumChar=big1[int.Parse (tempChar.ToString ())];

    if(tempNumChar=="零")
    {
    if(preChar!="零")
    {
    preChar="零";
    returnString=returnString+tempNumChar; //每一个零要相加
    }
    }
    else
    {
    preChar=tempNumChar;
    if(pos>=0)
    {
    tempNumChar=tempNumChar+tempValueChar;
    }
    returnString=returnString+tempNumChar;
    } } if(returnString.Length >0)
    {
    if(returnString.Substring (returnString.Length -1,1)=="零")
    {
    returnString=returnString.Substring (0,returnString.Length -1);
    } return returnString;
    } return "零"; //在所有数字都为零的情况下返回一个零。
                    
    }

    }
      

  11.   

    to :diven_net(破罐子破摔~~) ( ) 信誉:98 你的算法有问题吧:1. 你有没有考虑多个零出现的问题如 50004 你可以看一下你的结果是什么!
      

  12.   

    回Cry_Out(东北) :
    我要处理的数据是带2位小数的(固定了的),比如5004.00,这样算出来的结果是没有问题的