天天看點

一個簡單的将數字轉化為漢字大寫的方法

package com.abc.ebank.util;

public class Digit2ChineseNumber {

 public Digit2ChineseNumber() {

  super();

 }

 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 + "整";

 }

 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);

 }

 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;

 }

 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;

 }

 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;

 }

 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) {

// }

}