例如:54675元轉(zhuǎn)換成 伍萬肆仟陸佰柒拾伍元
/*
* Amount2RMB.java 2008-6-15
*/
package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Amount2RMB {
private static final Pattern AMOUNT_PATTERN =
Pattern.compile("^(0|[1-9]\\d{0,11})\\.(\\d\\d)$"); // 不考慮分隔符的正確性
private static final char[] RMB_NUMS = "零壹貳叁肆伍陸柒捌玖".toCharArray();
private static final String[] UNITS = {"元", "角", "分", "整"};
private static final String[] U1 = {"", "拾", "佰", "仟"};
private static final String[] U2 = {"", "萬", "億"};
/**
* 將金額(整數(shù)部分等于或少于12位,小數(shù)部分2位)轉(zhuǎn)換為中文大寫形式.
* @param amount 金額數(shù)字
* @return 中文大寫
* @throws IllegalArgumentException
*/
public static String convert(String amount) throws IllegalArgumentException {
// 去掉分隔符
amount = amount.replace(",", "");
// 驗證金額正確性
if (amount.equals("0.00")) {
throw new IllegalArgumentException("金額不能為零.");
}
Matcher matcher = AMOUNT_PATTERN.matcher(amount);
if (! matcher.find()) {
throw new IllegalArgumentException("輸入金額有誤.");
}
String integer = matcher.group(1); // 整數(shù)部分
String fraction = matcher.group(2); // 小數(shù)部分
String result = "";
if (! integer.equals("0")) {
result += integer2rmb(integer) + UNITS[0]; // 整數(shù)部分
}
if (fraction.equals("00")) {
result += UNITS[3]; // 添加[整]
} else if (fraction.startsWith("0") && integer.equals("0")) {
result += fraction2rmb(fraction).substring(1); // 去掉分前面的[零]
} else {
result += fraction2rmb(fraction); // 小數(shù)部分
}
return result;
}
// 將金額小數(shù)部分轉(zhuǎn)換為中文大寫
private static String fraction2rmb(String fraction) {
char jiao = fraction.charAt(0); // 角
char fen = fraction.charAt(1); // 分
return (RMB_NUMS[jiao - '0'] + (jiao > '0' ? UNITS[1] : ""))
+ (fen > '0' ? RMB_NUMS[fen - '0'] + UNITS[2] : "");
}
// 將金額整數(shù)部分轉(zhuǎn)換為中文大寫
private static String integer2rmb(String integer) {
StringBuilder buffer = new StringBuilder();
// 從個位數(shù)開始轉(zhuǎn)換
int i, j;
for (i = integer.length() - 1, j = 0; i >= 0; i--, j++) {
char n = integer.charAt(i);
if (n == '0') {
// 當n是0且n的右邊一位不是0時,插入[零]
if (i < integer.length() - 1 && integer.charAt(i + 1) != '0') {
buffer.append(RMB_NUMS[0]);
}
// 插入[萬]或者[億]
if (j % 4 == 0) {
if (i > 0 && integer.charAt(i - 1) != '0'
|| i > 1 && integer.charAt(i - 2) != '0'
|| i > 2 && integer.charAt(i - 3) != '0') {
buffer.append(U2[j / 4]);
}
}
} else {
if (j % 4 == 0) {
buffer.append(U2[j / 4]); // 插入[萬]或者[億]
}
buffer.append(U1[j % 4]); // 插入[拾]、[佰]或[仟]
buffer.append(RMB_NUMS[n - '0']); // 插入數(shù)字
}
}
return buffer.reverse().toString();
}
public static void main(String[] args) {
// log4j?
System.out.println("壹萬陸仟肆佰零玖元零貳分".equals(convert("16,409.02")));
System.out.println("壹仟肆佰零玖元伍角".equals(convert("1,409.50")));
System.out.println("陸仟零柒元壹角肆分".equals(convert("6,007.14")));
System.out.println("壹仟陸佰捌拾元叁角貳分".equals(convert("1,680.32")));
System.out.println("叁佰貳拾伍元零肆分".equals(convert("325.04")));
System.out.println("肆仟叁佰貳拾壹元整".equals(convert("4,321.00")));
System.out.println("壹分".equals(convert("0.01")));
System.out.println(convert("1234,5678,9012.34")
.equals("壹仟貳佰叁拾肆億伍仟陸佰柒拾捌萬玖仟零壹拾貳元叁角肆分"));
System.out.println(convert("1000,1000,1000.10")
.equals("壹仟億零壹仟萬零壹仟元壹角"));
System.out.println(convert("9009,9009,9009.99")
.equals("玖仟零玖億玖仟零玖萬玖仟零玖元玖角玖分"));
System.out.println(convert("5432,0001,0001.01")
.equals("伍仟肆佰叁拾貳億零壹萬零壹元零壹分"));
System.out.println(convert("1000,0000,1110.00")
.equals("壹仟億零壹仟壹佰壹拾元整"));
System.out.println(convert("1010,0000,0001.11")
.equals("壹仟零壹拾億零壹元壹角壹分"));
System.out.println(convert("1000,0000,0000.01")
.equals("壹仟億元零壹分"));
}
}
public final static String[] SEG_STR = new String[]{"", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟"};
private String convert(String num) {
// 每個數(shù)字后插入單位
StringBuffer ret = new StringBuffer();
int pos = 0;
for (int i = num.length() - 1; i >= 0; i--) {
char curChar = num.charAt(i);
ret.insert(0, SEG_STR[pos]);
ret.insert(0, curChar);
pos++;
}
String retStr = ret.toString();
// 0仟0佰0拾,替換為0
retStr = retStr.replaceAll("0[仟佰拾]", "0");
// 0萬0億(0兆0京等等),替換為萬/億等
retStr = retStr.replaceAll("0([萬億兆京垓])", "$1");
// 一個或多個0,替換為一個零
retStr = retStr.replaceAll("0+", "零");
// 去掉末尾的零
retStr = retStr.replaceAll("零$", "");
// 123456789替換為大寫數(shù)字
retStr = retStr.replaceAll("1", "壹")
.replaceAll("2", "貳")
.replaceAll("3", "叁")
.replaceAll("4", "肆")
.replaceAll("5", "伍")
.replaceAll("6", "陸")
.replaceAll("7", "柒")
.replaceAll("8", "捌")
.replaceAll("9", "玖");
// 加上結(jié)尾單位
retStr += "元整";
System.out.println(retStr);
return retStr;
}
public static String spritString(String numStr){
//切割傳進來的數(shù)字字符串成數(shù)組
return [1,2,3,4,5];
}
public static numToBigNum(String arr[]){
String str = "";
//根據(jù)傳入的數(shù)組解析
for(int i = arr.length;i >= 0 ;i--){
//調(diào)用parseNum 方法 從第一位開始
parseNum(arr[arr.length-i],i);
}
}
public static String parseNum(String num,Integer index){
String str = "";
// 1 -> 壹; 2 -> 貳 ...
switch(String num){
cast "1":
str += " 壹"
break;
....
}
//num
switch(index){
case 1:
str += "";
break:
case 2:
str += "百";
break:
case 3:
str += "千";
break:
case 4:
str += "萬";
break;
......
}
}
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。