一個簡單的將數字轉化爲漢字大寫的方法

package com.abc.ebank.util;

/**
 * @author wangshuangli
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */
public class Digit2ChineseNumber {

 /**
  * Constructor for Digit2ChineseNumber.
  */
 public Digit2ChineseNumber() {
  super();
 }
 /**將金額小寫轉化爲大寫
  * Method Number2Cap.
  * @param amount
  * @return String
  * 首先將小寫數字轉化爲大寫漢字,中間不作其他事情
  * 然後再在其中添加"萬"等東西;
  */
 public static String Number2Cap(String amount) {

  amount = Num2ChCap(amount);

  int decimal_address; //小數點的位置如果沒有小數點則值爲數值長度加1;,有小數點則爲小數點所在位置
  String s_decimal = "";
  if (amount.indexOf('.') != -1) { //有小數點的情況
   decimal_address = amount.indexOf('.');
   s_decimal = amount.substring(decimal_address + 1);
   if (s_decimal.trim().equals("零零")) {
    s_decimal = "";
   } else if (s_decimal.trim().equals("零")) {
    s_decimal = "";
   } else {
    s_decimal = DecAddUnit(s_decimal);
   }
  } else {
   decimal_address = amount.length() + 1;
  }
  String s_Int = amount.substring(0, decimal_address);
  s_Int = IntAddUnit(s_Int);
  s_Int = Coordinate_String(s_Int); //整理字符串將一些多餘的東西去除
  return s_Int + s_decimal + "整";
 }

 /**整理字符串將一些多餘的東西去除如零元零萬等
  * Method Coordinate_String.
  * @param s_Int
  * @return String
  */
 private static String Coordinate_String(String s_Int) {
  int address;
  //for循環去除零
  for (; true;) {
   address = s_Int.indexOf("零萬");
   if (address == -1) {
    address = s_Int.indexOf("零仟");
   }
   if (address == -1) {
    address = s_Int.indexOf("零佰");
   }
   if (address == -1) {
    address = s_Int.indexOf("零拾");
   }
   if (address == -1) {
    address = s_Int.indexOf("零億");
   }
   if (address == -1) {
    address = s_Int.indexOf("零元");
   }
   if (address == -1)
    break;
   System.err.println(s_Int.substring(0, address));
   System.err.println(s_Int.substring(address + 2));
   s_Int = s_Int.substring(0, address) + s_Int.substring(address + 1);
  }
  String tmp = "@億@萬@千@佰@拾億萬億仟億佰億拾萬仟萬佰萬拾仟佰仟拾佰拾";
  s_Int = "@" + s_Int;
  for (int i = 0; i < tmp.length();) {
   String tmp1 = tmp.substring(i, i + 2);
   address = 0;
   for (; true;) {
    address = s_Int.indexOf(tmp1);
    if (address == -1)
     break;
    System.err.println(s_Int.substring(0, address + 1));
    System.err.println(s_Int.substring(address + 2));
    s_Int =
     s_Int.substring(0, address + 1)
      + s_Int.substring(address + 2);
   }
   i += 2;
  }
  return s_Int.substring(1);
 }

 /**添加萬仟佰拾億仟佰拾萬仟佰拾元到字符串對應位置
  * Method IntAddUnit.
  * @param s_Int
  * @return String
  */
 private static String IntAddUnit(String s_Int) {
  String Units = "元拾佰仟萬拾佰仟億拾佰仟萬";

  s_Int = StringOverTurn(s_Int);
  int s_Int_length = s_Int.length();
  String tmp = "";
  for (int i = 0; i < s_Int_length; i++) {
   tmp =
    tmp
     + String.valueOf(Units.charAt(i))
     + String.valueOf(s_Int.charAt(i));
  }
  tmp = StringOverTurn(tmp);
  return tmp;
 }

 /**字符串翻轉將從abcdefg翻轉爲gfedcba
  * Method StringOverTurn.
  * @param s_Int
  * @return String
  */
 private static String StringOverTurn(String s_Int) {
  ;
  int s_Int_length = s_Int.length();
  char[] Overtmp = s_Int.toCharArray();
  String tmp = "";
  for (int i = s_Int_length - 1; i > -1; i--) {
   tmp = tmp + Overtmp[i];
  }
  return tmp;
 }

 /**將角分加入字符串對應位置中
  * Method DecAddUnit.
  * @param s_decimal
  * @return String
  */
 private static String DecAddUnit(String returnString) {

  switch (returnString.length()) {
   //小數長度爲1表示只有角無分
   case 1 :
    returnString =
     returnString.substring(0, 1)
      + "角"
      + returnString.substring(2);

    break;
    //小數長度爲2表示有角有分
   case 2 :
    returnString =
     returnString.substring(0, 1)
      + "角"
      + returnString.substring(1, 2)
      + "分";

    break;
  } //end of swtich
  return returnString;
 }

 /**將數字轉換爲中文大寫
  * 返回格式爲壹貳.壹貳
  * Method Num2ChCap.
  * @param amount
  * @return String
  */
 private static String Num2ChCap(String amount) {
  int length = amount.length();
  char CapNumber;
  String returnString = "";
  for (int i = 0; i < length; i++) {
   CapNumber = amount.charAt(i);
   switch (CapNumber) {
    case '0' :
     returnString = returnString + "零";
     break;
    case '1' :
     returnString = returnString + "壹";
     break;
    case '2' :
     returnString = returnString + "貳";
     break;
    case '3' :
     returnString = returnString + "叄";
     break;
    case '4' :
     returnString = returnString + "肆";
     break;
    case '5' :
     returnString = returnString + "伍";
     break;
    case '6' :
     returnString = returnString + "陸";
     break;
    case '7' :
     returnString = returnString + "柒";
     break;
    case '8' :
     returnString = returnString + "捌";
     break;
    case '9' :
     returnString = returnString + "玖";
     break;
    case '.' :
     returnString = returnString + ".";
     break;
   } //end of case;
  } //end of for;
  return returnString;

 }

// public static void main(String[] args) {
// }
}

發佈了40 篇原創文章 · 獲贊 0 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章