首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

金额转换,该怎么解决

2012-09-17 
金额转换小弟刚学Java,请教大哥大姐们一个问题:阿拉伯数字转换成中国传统的形式如:(¥1011)—(一千零佰一拾

金额转换
小弟刚学Java,请教大哥大姐们一个问题:阿拉伯数字转换成中国传统的形式如:(¥1011)—>(一千零佰一拾一元整)输出。提示:输入时只输入数字,输出中国传统形式的字符串。

[解决办法]
zi ji yan jiu ba 


Java code
public class Reader {  private String strNum;  private String strNumChFormat;  private String strNumTemp;  private int intNumLen;  private String strBegin;  public Reader(String strNum) {    this.strNum = strNum;  }  public boolean check(String strNum) {    boolean valid = false;        if (strNum.substring(0,1).equals("0")){     this.strNum = strNum.substring(1);    }    try {      new Double(strNum);      valid = true;    }    catch (NumberFormatException ex) {      System.out.println("Bad number format!");    }    return valid;  }  public void init() {    strNumChFormat = "";    intNumLen = strNum.length();    strNumTemp = strNum;    strNumTemp = strNumTemp.replace('1', '一');    strNumTemp = strNumTemp.replace('2', '二');    strNumTemp = strNumTemp.replace('3', '三');    strNumTemp = strNumTemp.replace('4', '四');    strNumTemp = strNumTemp.replace('5', '五');    strNumTemp = strNumTemp.replace('6', '六');    strNumTemp = strNumTemp.replace('7', '七');    strNumTemp = strNumTemp.replace('8', '八');    strNumTemp = strNumTemp.replace('9', '九');    strNumTemp = strNumTemp.replace('0', '零');    strNumTemp = strNumTemp.replace('.', '点');    strBegin = strNumTemp.substring(0, 1);  }  public String readNum() {    if (check(strNum)) {      init();      try {        for (int i = 1, j = 1, k = 1; i < intNumLen; i++) {          if (strNumTemp.charAt(intNumLen - 1) == '零' && i == 1) {            strNumChFormat = "位";          }          else if (strNumTemp.charAt(intNumLen - i) == '零' && j == 1) {            strNumChFormat = "位" + strNumChFormat;          }          else if (strNumTemp.charAt(intNumLen - i) == '点') {            j = 1;            k = 1;            strNumChFormat = strNumTemp.charAt(intNumLen - i) + strNumChFormat;            continue;          }          else {            strNumChFormat = strNumTemp.charAt(intNumLen - i) + strNumChFormat;          }          if (strNumTemp.charAt(intNumLen - i - 1) != '位' &&              strNumTemp.charAt(intNumLen - i - 1) != '零') {            if (j == 1 && i < intNumLen) {              strNumChFormat = '拾' + strNumChFormat;            }            else if (j == 2 && i < intNumLen) {              strNumChFormat = '百' + strNumChFormat;            }            else if (j == 3 && i < intNumLen) {              strNumChFormat = '千' + strNumChFormat;            }          }          if (j == 4 && i < intNumLen) {            j = 0;          }          if (k == 4 && i < intNumLen) {            strNumChFormat = '万' + strNumChFormat;          }          else if (k == 8 && i < intNumLen) {            k = 0;            strNumChFormat = '亿' + strNumChFormat;          }          j++;          k++;        }        while (strNumChFormat.indexOf("位") != -1) {          strNumChFormat = strNumChFormat.replaceAll("位", " ");        }        if (strNumChFormat.substring(0, 2) == "一拾") {          strNumChFormat = strNumChFormat.substring(1, strNumChFormat.length());        }        if (strNumChFormat.indexOf("点") >= 0) {          String rebegin = strNumChFormat.substring(0,              strNumChFormat.indexOf("点"));          String relast = strNumChFormat.substring(strNumChFormat.indexOf("点"),              strNumChFormat.length());          for (int i = 1; i <= relast.length(); i++) {            relast = relast.replaceAll("拾", "");            relast = relast.replaceAll("百", "");            relast = relast.replaceAll("千", "");            relast = relast.replaceAll("万", "");            relast = relast.replaceAll("亿", "");          }          strNumChFormat = rebegin + relast;        }      }      catch (ArrayIndexOutOfBoundsException ex) {        ex.printStackTrace();      }      catch (Exception ex) {        ex.printStackTrace();      }      int off = strNumChFormat.indexOf("点");      strNumChFormat = strBegin + strNumChFormat.substring(0);    }    else {      strNumChFormat = "";    }    return strNumChFormat;  }  public static void main(String args[]) {    try {      String number = args[0].toString();      System.out.println("The number is: " + number);      Reader reader = new Reader(number);      System.out.println("Output String: " + reader.readNum());    }    catch (Exception ex) {      System.out.println("Please input like that: javac Reader <number>");    }  }} 


[解决办法]

Java code
/** * 念10万以内的任意数字。例如534念作伍佰叁十肆, * 203念作贰佰零叁。7003念作柒千零叁。 */public class Exec5 {    public static void main(String[] args) {        int n = 10;                //拆分数字        /*         * 个位数字放在数组的末尾,         *    十位数字放在倒数第二个,依次类推         */        int[] number = new int[10];        int num = 0;  //拆出的数字个数        int len = number.length;        int temp = n;        while(temp > 0){            //存储拆分出的数字            number[len - 1 - num] = temp % 10;            num++;            temp /= 10; //去掉个位数字        }                //转换为大写        char[] upper = {'零','壹',                '贰','叁','肆','伍','陆','柒','捌','玖'        };        char[] right = {' ','拾','佰','千','万'};                String s = "";        boolean b = false;        for(int i = len - num;i < len;i++){            if(number[i] == 0){                b = true;            }else{                if(b){                    s = s + "零";                    b = false;                }                s = s + upper[number[i]] +                     right[len - i - 1];            }                    }                System.out.println(s);    }}
[解决办法]
package NumToRMB;

public class Class1 {
public static String ConvertNumberToChinese(String x, String[] Nums, String[] Digits, String[] Units) 

String S = ""; //返回值 
int p = 0; //字符位置指针 
int m = x.length() % 4; //取模 

// 四位一组得到组数 
int k = (m > 0 ? x.length() / 4 + 1 : x.length() / 4); 

// 外层循环在所有组中循环 
// 从左到右 高位到低位 四位一组 逐组处理 
// 每组最后加上一个单位: "[万亿]","[亿]","[万]" 
for (int i = k; i > 0; i--) 

int L = 4; 
if (i == k && m != 0) 

L = m; 

// 得到一组四位数 最高位组有可能不足四位 
String s = x.substring(p, p + L); 
int l = s.length(); 

// 内层循环在该组中的每一位数上循环 从左到右 高位到低位 
for (int j = 0; j < l; j++) 

//处理改组中的每一位数加上所在位: "仟","佰","拾",""(个) 
int n = java.lang.Integer.parseInt(s.substring(j, j+1)); 
if (n == 0) 

if ((j < l - 1) 
&& (java.lang.Integer.parseInt(s.substring(j + 1, j + 1+ 1)) > 0) //后一位(右低) 
&& !S.endsWith(Nums[n])) 

S += Nums[n]; 


else 

//处理 1013 一千零"十三", 1113 一千一百"一十三" 
if (!(n == 1 && (S.endsWith(Nums[0]) | S.length() == 0) && j == l - 2)) 

S += Nums[n]; 

S += Digits[l - j - 1]; 


p += L; 
// 每组最后加上一个单位: [万],[亿] 等 
if (i < k) //不是最高位的一组 

if (java.lang.Integer.parseInt(s) != 0) 

//如果所有 4 位不全是 0 则加上单位 [万],[亿] 等 
S += Units[i - 1]; 


else 



//处理最高位的一组,最后必须加上单位 
S += Units[i - 1]; 


return S; 


// 测试程序 
public static void main(String[] args) throws Exception 

//数字 数组 
String[] Nums = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; 
//位 数组 
String[] Digits = new String[] {"", "拾", "佰", "仟"}; 
//单位 数组 
String[] Units = new String[] {"", "[万]", "[亿]", "[万亿]"}; 

System.out.println(ConvertNumberToChinese("111112100113", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("1100000000", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("1000000000", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("40000000013", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("40000000001", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("400000010000", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("40101031013", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("40101031113", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("101140101031013", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("100000001000013", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("100000001000113", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("100011003", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("10010103", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("10110013", Nums, Digits, Units)); 
System.out.println(ConvertNumberToChinese("130000", Nums, Digits, Units)); 

//System.in.read(); 


}

热点排行