我前天得到老师布置的两个作业,苦想一天不知如何下手,请大家来帮帮忙! 小弟我在次谢谢!!
我不知道用什么方法来把浮点数值转化为中文金额的大写方式,是要用到ASC码吗??怎么用啊???大家只要给出怎么转化的方法代码就可以了,给出全部源代码更好。 (题目如下)编写Applet小程序,实现输入一个浮点数值,将其转化为中文金额的大写方式,如:123.45,转化为:壹佰贰拾叁元肆角伍分。
  实验要求:
 编写程序实现题意并调试通过,针对以下多种数据情况进一步完善程序。
(1)当金额为整数时,只表示整数部分,省略小数部分,并添加“整”字。
(2)当金额中含有连续的0时,只需写一个“零”即可。如:10005表示为壹万零伍元整。
(3)10的表示。例如:110表示为壹佰壹拾元整,而10表示为拾元整。

解决方案 »

  1.   

    有意思,等一下,我没JAVA环境,用C#编个给你提供思路,完全搞出来你就没得搞了,那是害你!
      

  2.   

    给你写算法是可以!
    1:把数字分成整数和小数部分,小数部分转换好解决,(0就是整,然后几元几角几分,几为零时略掉)下面是整数部分算法:2:把整数部分从“右”到“左”4位4位截取!然后把截出的数据分别转化,转化后在后面依次加上万,亿,万,亿...(明白吗?^_^)3:转化4位数,前面不足加零(123变成0123),从左到右读过去,把零的略掉,0123=>零千一百二十三 =>一百二十三
    然后“组装”好就是答案拉!
      

  3.   

    ////////////////////////////////////////////////////////////
    //C#源码(测试通过),哈哈,花了我近一个半小时,理应多加100分!
    ////////////////////////////////////////////////////////////
    private string MoneyConv(float flt)
    {
    try
    {
    float fOld = flt; string strPostfix = "元整"; string strResult = ""; //转换为string
    string strOld = fOld.ToString(); //查找小数点位置
    int iRe = strOld.IndexOf('.');
    //截取字符串(去掉小数位)
    if (iRe > 0)
    {
    strOld = strOld.Substring(0, iRe);
    } //转换为char数组
    char[] arrCh = strOld.ToCharArray();
    int iLen = arrCh.Length;
    string strTemp = ""; //从后往前 //个位
    bool oneis0 = (arrCh[iLen-1] == '0');
    if (oneis0 == false)
    {
    strTemp = intToStr(arrCh[iLen-1]).ToString();
    } bool tenis0 = true;
    if (iLen >= 2)
    {
    //判断是否为10的情况(共两位)
    if (arrCh.Length == 2)
    {
    //十位为1
    if (arrCh[0] == '1')
    {
    strTemp = "拾";
    }
    else
    {
    strTemp = intToStr(arrCh[0]).ToString() + "拾";
    } //个位
    if (oneis0 == false)
    {
    strTemp += intToStr(arrCh[1]).ToString();
    }
    }
    else
    { //十位
    tenis0 = (arrCh[iLen-2] == '0');
    //如果个位和十位都为0,这里就不作操作
    if ((oneis0 && tenis0) == false)
    {
    if (tenis0)
    {
    strTemp = intToStr(arrCh[iLen-2]) + strTemp;
    }
    else
    {
    strTemp = intToStr(arrCh[iLen-2]) + "拾" + strTemp;
    }
    }
    }
    } bool hunis0 = true;
    if (iLen >= 3)
    {
    //百位
    hunis0 = (arrCh[iLen-3] == '0');
    //如果百位和十位都为0,不操作(前面已经处理了)
    if ((tenis0 && hunis0) == false)
    {
    if (hunis0)
    {
    strTemp = intToStr(arrCh[iLen-3]) + strTemp;
    }
    else
    {
    strTemp = intToStr(arrCh[iLen-3])+"佰" + strTemp;
    }
    }
    } if (iLen >= 4)
    {
    //千位
    bool thois0 = (arrCh[iLen-4] == '0');
    //同上
    if ((thois0 && hunis0) == false)
    {
    if (thois0)
    {
    strTemp = intToStr(arrCh[iLen-4])+ strTemp;
    }
    else
    {
    strTemp = intToStr(arrCh[iLen-4]) +"仟" + strTemp;
    }
    }
    } if (iLen >= 5)
    {
    //万位
    strTemp = intToStr(arrCh[iLen-5]) +"万" + strTemp;
    }
    strResult = strTemp; //加上后面的"元整“
    strResult += strPostfix;
    return strResult;
    }
    catch (Exception ex)
    {
    MessageBox.Show("出现异常:"+ex.ToString());
    return null;
    }
    }char intToStr(char i)
    {
    char temp = '零';
    switch (i)
    {
    case '0':
    temp = '零';
    break;
    case '1':
    temp = '壹';
    break;
    case '2':
    temp = '贰';
    break;
    case '3':
    temp = '叁';
    break;
    case '4':
    temp = '肆';
    break;
    case '5':
    temp = '伍';
    break;
    case '6':
    temp = '陆';
    break;
    case '7':
    temp = '柒';
    break;
    case '8':
    temp = '捌';
    break;
    case '9':
    temp = '玖';
    break;
    default:
    throw new Exception("参数错误");
    }
    return temp;
    }
      

  4.   

    以小数点为分隔
    整数部分按个位十位百位...分别以用String或这个String数组表示
    再按情况表示出来不就可以了
    比如
    123.22
    百位为1就str1=壹
    十位就为2  str2=贰
    个位就为3  str3 = 叁
    小数部分同理
    再整合 str = str1 + "佰" + str2 + "拾" + str3 ........
    System.out.println(str);
    这只是思路,具体代码的实现自己写吧
      

  5.   

    对了,我只是到万的情况,超过万就不行了,不过逻辑差不多。其实可以用for循环,不过像我这样比较形象些。用for稍微要多考虑一点。
      

  6.   

    /**
     * 来个java版本的:)
     */
    package util;public class Util {
      private final static String[] MANTISSA = {"亿", "万", ""};
      private final static String[] UNITS = {"千", "百", "十", ""};
      private final static String[] CAPITAL = 
        {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
      /**
       * 数字转换为中文的金额大写
       * @param money String
       * 要求输入的金额只能是***.**格式,如1234.44、23551.00等
       * @return String
       */
      public final static String Digital2ChCapital(String money){
        char c = money.charAt(money.length()-3);
        if(money == null || money.length()<4 || 
           money.charAt(money.length()-3) != '.'){
          System.out.println("金额输入错误!");
          return null;
        }
        
        int length = money.length();
        byte[] bMoney = money.getBytes();
        int m = (length-3)/4;
        int n = (length-3)%4;
        int index = 0;
        StringBuffer sbCapital = new StringBuffer();
        boolean isZero;
        boolean isMZero;
        for(int i=0; i<=m; i++){
          isMZero = true;
          isZero = false;
          int bit = (i==0)?n:4;
          for(int j = 0; j<bit; j++){
            if(bMoney[index]=='0'){
              isZero = true;
              index++;
            }else if(isZero){
              sbCapital.append("零");
              isZero = false;
              isMZero = false;
              sbCapital.append(CAPITAL[bMoney[index++]-'0']);
              sbCapital.append(UNITS[4-bit+j]);
            }else{
              isZero = false;
              isMZero = false;
              sbCapital.append(CAPITAL[bMoney[index++]-'0']);
              sbCapital.append(UNITS[4-bit+j]);
            }
            if(j==bit-1&&i<m && !isMZero){
              sbCapital.append(MANTISSA[ (m - i) % 2]);
            }        
          }
        }
        sbCapital.append("元");
        index++;
        if(bMoney[index] == '0' && bMoney[index+1] == '0'){
          sbCapital.append("整");
        }else{
          sbCapital.append(CAPITAL[bMoney[index]-'0']);
          if(bMoney[index++]!='0'){
            sbCapital.append("角");
          }
          if(bMoney[index]!='0'){
            sbCapital.append(CAPITAL[bMoney[index] - '0'] + "分");
          }
        }
        return sbCapital.toString();
      }
      
      public static void main(String[] args) {
        String capital = Util.Digital2ChCapital("5435510000800078.34");
        System.out.println(capital);
      }
    }/*
     * 输出:伍千肆百叁十伍万伍千壹百亿零捌十万零柒十捌元叁角肆分
     */
      

  7.   

    十行解决人民币大小写转换 
    Delphi改编而得:
    Const cNum = "零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分"
    Const cCha = "零仟零佰零拾零零零零零亿零万零元亿万零角零分零整-零零零零零亿万元亿零整整"
      NtoC = ""
      sNum = Trim(Str(Round(n, 2) * 100)) '在这里用Round()四舍五入
      For i = 1 To Len(sNum) '逐位转换
        NtoC = NtoC + Mid(cNum, (Mid(sNum, i, 1)) + 1, 1) + Mid(cNum, 26 - Len(sNum) + i, 1)
      Next
      For i = 0 To 11 '去掉多余的零
        NtoC = Replace(NtoC, Mid(cCha, i * 2 + 1, 2), Mid(cCha, i + 26, 1))
      Next
    End Function
      

  8.   

    import javax.swing.JOptionPane;
    import java.awt.*;
    public class Money {
        String[] chinese = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
        String[] unit = {"十", "百", "千", "万", "十万", "百万", "千万", "亿"};
        public Money() {
            try {
                int count = 0;
                boolean flag = true;
                String strUnit;
                String totalMoneyCHN = "";
                String strMoney = JOptionPane.showInputDialog(null, "请输入金额");
                double dbMoney = Double.parseDouble(strMoney);
                char charMoney[] = strMoney.toCharArray();
                int position = strMoney.indexOf(".");
                if (position == -1) {
                    position = strMoney.length();
                    flag = false;
                }
                for (int i = 0; i < position; i++) {
                    if ((charMoney[i] + "").equals("0")) {
                        count = count + 1;
                    } else {
                        String strMoneyCHN = chinese[Integer.parseInt(charMoney[i] +
                                "")];
                        if (count >= 1) {
                            strMoneyCHN = "零" + strMoneyCHN;
                            count = 0;
                        }                    if (i == position - 1) {
                            strUnit = "";
                        } else {
                            strUnit = unit[position - i - 2];
                        }
                        totalMoneyCHN = totalMoneyCHN + strMoneyCHN + strUnit;
                    }
                }
                if (flag) {
                    totalMoneyCHN = totalMoneyCHN + "点";
                    char[] charPosition = (strMoney.substring(position + 1,
                            strMoney.length())).toCharArray();
                    for (int i = 0; i < charPosition.length; i++) {
                        totalMoneyCHN = totalMoneyCHN +
                                        chinese[Integer.parseInt(charPosition[i] + "")];
                    }
                    System.out.println(totalMoneyCHN);
                }        } catch (NumberFormatException ex) {
                System.out.println("所输入的金额不正确,请重新输入");
                ex.printStackTrace();
            }
        }    public static void main(String[] args) {
            Money money = new Money();
        }
    }/**这是我的,不过写得可能会比较乱吧,大概的都实现了,可能会有小BUG