请编写一方法,实现将金额数字转换成大写的形式,如:13983.45元 转换之后为 一万叁仟玖佰捌拾叁圆肆角五分
;又如:3568 转换之后为 叁仟伍佰陆拾捌圆整。(用Java语言)
谢谢!

解决方案 »

  1.   

    google吧,这种东西也用来做面试题那公司真恶心
      

  2.   

    运用char类和string类,应该可以解决的,里面可能要设计循环控制语句(if-else if-else也可以把)lz可以尝试一下自己解决这个问题,应该很简单的
      

  3.   

    尝试的写了一下,程序不是很健壮,不过可以满足LZ提的那两个要求了。对1亿以上的数没有进行判断,写的有点小恶心抱歉,水平有限
    public class Test_num { /**
     * @param args
     */
    private String[] str = {"","十","百","千","万"}; //小数以前的位
    private String[] str1 = {"一","二","三","四","五","六","七","八","九"}; //中文数字,没有改成大写的
    private String[] str2 = {"角","分"}; //小数的位

    public void changeNumToString(double num){
    double n = num;
    String out = "";
    int wan = 0;
    if(n>10000){ //如果输入的数字大于10000
    wan = (int) (n/10000); // wan保存万位以上的数字
    if(wan > 10000){ //判断输入的数字是否为亿以上的
    //方法都一样,这里没有再写
    }else{
    //对万位以上的进行排版
    out += method1(wan);
    out += str[4];

    //对万位以下的进行排版
    int n1 = (int) n%10000;
    out += method1(n1) + "元";
    //对小数位进行排版
    double n2 = n%1;
    if(n2>0){
    out += method2(n2);
    }else{
    out += "整";
    }
    }
    }else{ //如果输入的数小于10000
    int n1 = (int) n;
    out += method1(n1) + "元";

    //对是否有小数后面的位进行判断
    double n2 = n%1;
    if(n2>0){
    out += method2(n2);
    }else{
    out += "整";
    }
    }
    System.out.println(out);
    }

    public String method1(int n){
    String out = "";
    int length = new Integer(n).toString().length();
    int weiNum1 = n;
    int weiNum = 0; //保存每位上的数字
    for(int i = length;i>0;i--){
    weiNum = (int) (weiNum1/Math.pow(10,i-1));  //获得最高位上的数字
    out += str1[weiNum-1] + str[i-1];
    weiNum1 = (int) (weiNum1%Math.pow(10,i-1)); //将数更新,及去掉最高位
    }
    return out;
    }

    public String method2(double n){
    String out = "";
    int weiNum = 0;
    double weiNum1 = n;
    for(int i=1;i<=2;i++){
    weiNum = (int) (weiNum1*Math.pow(10,1));  //获得离小数点最近位的数字
    out += str1[weiNum-1]+str2[i-1];
    weiNum1 = weiNum1*Math.pow(10,i)%1; //将数更新,去掉离小数点最近的,并把后面的向前提一位
    }
    return out;
    }


    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Test_num tn = new Test_num();
    //两个测试例子  分别是大于10000的和小于10000的
    tn.changeNumToString(12345.32);
    tn.changeNumToString(123.12);
    }}
      

  4.   

    发现个小问题,现在已经更新,可以接受纯小数作为输入
    public class Test_num { /**
     * @param args
     */
    private String[] str = {"","十","百","千","万"}; //小数以前的位
    private String[] str1 = {"一","二","三","四","五","六","七","八","九"}; //中文数字,没有改成大写的
    private String[] str2 = {"角","分"}; //小数的位

    public void changeNumToString(double num){
    double n = num;
    String out = "";
    int wan = 0;
    if(n>10000){ //如果输入的数字大于10000
    wan = (int) (n/10000); // wan保存万位以上的数字
    if(wan > 10000){ //判断输入的数字是否为亿以上的
    //方法都一样,这里没有再写
    }else{
    out += method1(wan); //对万位以上的进行排版
    out += str[4]; //在输入中加上 万 

    out += method3(n%10000);//对万位以下的进行排版
    }
    }else{ //如果输入的数小于10000
    if(num>1){ //如果输入的数是大于1的数
    out += method3(n);
    }else{ //如果输入的只是小数
    out += method2(num);
    }
    }
    System.out.println(out);
    }

    public String method1(int n){
    String out = "";
    int length = new Integer(n).toString().length();
    int weiNum1 = n;
    int weiNum = 0; //保存每位上的数字
    for(int i = length;i>0;i--){
    weiNum = (int) (weiNum1/Math.pow(10,i-1));  //获得最高位上的数字
    out += str1[weiNum-1] + str[i-1];
    weiNum1 = (int) (weiNum1%Math.pow(10,i-1)); //将数更新,及去掉最高位
    }
    return out;
    }

    public String method2(double n){
    String out = "";
    int weiNum = 0;
    double weiNum1 = n;
    for(int i=1;i<=2;i++){
    weiNum = (int) (weiNum1*Math.pow(10,1));  //获得离小数点最近位的数字
    out += str1[weiNum-1]+str2[i-1];
    weiNum1 = weiNum1*Math.pow(10,i)%1; //将数更新,去掉离小数点最近的,并把后面的向前提一位
    }
    return out;
    }

    public String method3(double n){
    String out="";
    int n1 = (int) n;
    out += method1(n1) + "元";
    //对是否有小数后面的位进行判断
    double n2 = n%1;
    if(n2>0){
    out += method2(n2);
    }else{
    out += "整";
    }
    return out;
    }


    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Test_num tn = new Test_num();
    //两个测试例子  分别是大于10000的和小于10000的
    tn.changeNumToString(12345.32);
    tn.changeNumToString(0.12);
    }}
      

  5.   

    整数部分提供一种解决方案!
    好与不好自己参考!数组单位 {"","十","百","千","万","十","百","千","亿"}数组数字{一,弍,}
    {
    n = 12345.23
    写一个方法取得(n/1)+"".toString()的位数-1(减一);(作为数组单位索引 index)
    同时n=n%Math(10,index),n作为数字数组的索引
    }
    以上为循环,这样整数部分就完事了小数部分就按上面的来就行
      

  6.   


    public class NumChangeToCH {
    //chUnit:格式化中文数字数组
    private static final char[] CHUNIT = 
    {'個','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万'};
    private static final String STRNUM = "0123456789";
    private static final char[] CHNUM = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};

    //将长整数变成中文数字
    public static String longToCH(long num){
    //定义一个字符序列保存中文数字的字符序列
    StringBuilder numStr = new StringBuilder();
    if(num<0){
    num = -num;
    numStr.append('负');
    }
    //将整数换成字符序列
    StringBuilder numTemp = new StringBuilder(new Long(num).toString());
    int len = numTemp.length();
    //将字符序列反转后换成字符数组
    char[] chArr = numTemp.reverse().toString().toCharArray();

    //将字符数组的每个数字替换成中文,同chUnit依次加入字符序列
    while(len-->0){
    numStr.append(CHNUM[STRNUM.indexOf(chArr[len])]);
    numStr.append(CHUNIT[len]);
    }

    return new String(numStr);
    }

    public static String moneyToCH(double money){
    String mon = new DecimalFormat(".00").format(money);
    String[] numArr = mon.split("\\.");

    //将整数部分得到,并把最后一个字符替换成"圆"
    mon = NumChangeToCH.longToCH(Long.parseLong(numArr[0]));
    mon = mon.substring(0, mon.length()-1) + "圆";

    //将小数部分换成角和分
    if(numArr.length>1){
    char[] dec = numArr[1].toCharArray();
    mon += CHNUM[STRNUM.indexOf(dec[0])] + "角";
    mon += CHNUM[STRNUM.indexOf(dec[1])] + "分";
    }

    return mon;
    }

    public static void main(String[] args) {
    System.out.println(NumChangeToCH.moneyToCH(1110012345.2));
    }
    }
    不知道会不会太乱……
    可以换算到万亿,如不够只需修改CHUNIT就可扩展。
      

  7.   

    http://www.javaeye.com/topic/176427在网上当一下就有了