?? rmb.java
字號:
package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Iterator;
/**
* @author songyunpeng
*/
public class Rmb {
static boolean ISIGNORE = false;//參數用來設置是否忽略錯誤,true為忽略錯誤,默認為false
static List digits = new ArrayList();
static List setDigits = new ArrayList();
static {
digits.add("拾");//0:拾
digits.add("佰");//1:佰
digits.add("仟");//2:仟
digits.add("萬");//,3:萬
digits.add("拾");//4:拾萬
digits.add("佰");//,5:佰萬
digits.add("仟");//6:仟萬
digits.add("億");//,7:億
digits.add("拾");//8:拾億
digits.add("佰");//,9:佰億
digits.add("仟");//10:仟億
digits.add("兆");//11:兆
digits.add("拾");//12:拾兆
digits.add("佰");//,13:佰兆
digits.add("仟");//仟兆
// digits.add("京"); //.
// digits.add("拾");//12:拾京
// digits.add("佰");//,13:佰京
// digits.add("仟");//???
//.....
setDigits.add("萬");
setDigits.add("億");
setDigits.add("兆");
// setDigits.add("京"); //
//.....
//百度搜索:個、十、百、千、萬、十萬、百萬、千萬、億、兆(10的12次方)、京〔10的16次方)、垓、秭、穰、溝、澗、正、載、極(10的48次方)、恒河沙、阿僧示氏、(梵文譯音、意思是無量)、那由他、不可思議(10的64次方)、無量數(∞)。
}
public String run(double moneyDb) throws Exception {
java.text.DecimalFormat fmt = new java.text.DecimalFormat(".00");
String moneyStr = fmt.format(moneyDb);
if(moneyDb == 0) {
return "零圓整";
}
return ConvertData(moneyStr);
}
// 轉換RMB函數
String ConvertData(String moneyParam) throws Exception {
System.out.println("=====try to fmt:"+moneyParam);
StringBuffer returnValue = new StringBuffer();
String [] strMoneys = java.util.regex.Pattern.compile("\\.").split(moneyParam);
int len = strMoneys[0].length();
if(strMoneys[0].startsWith("-")) {
returnValue.append("負");
len--;
}
strMoneys[0] = strMoneys[0].replaceFirst("-", "");
// 判斷可不可以轉
if(len>digits.size()+1) {
if(this.ISIGNORE) {
return moneyParam;
}
throw new Exception("函數:RMB出錯:數字太大或太小,無法換算.");
}
//轉整數
for(int i = 0; i < strMoneys[0].length(); i++) {
String value = strMoneys[0].charAt(i)+"";
returnValue.append(Convert1Digit(value,strMoneys[0].length()-2-i));
}
String tmp = returnValue.toString();
//linlin..
java.util.regex.Pattern p = java.util.regex.Pattern.compile(".*零零.*");//("零零|零萬|零億");
java.util.regex.Matcher m = p.matcher(tmp);
while(m.find()) {
tmp = tmp.replaceAll("零零","零");
m = p.matcher(tmp);
}
//lindigits
String preDigitsName="",digitsName;
for(int i = 0; i < setDigits.size(); i++) {
digitsName = (String)setDigits.get(i);
tmp = tmp.replaceAll("零"+digitsName,digitsName);
}
if(!setDigits.isEmpty()) {
preDigitsName = (String) setDigits.get(0);
}
for(int i = 1; i < setDigits.size(); i++) {//tmp = tmp.replaceAll("億萬","億零");
digitsName = (String) setDigits.get(i);
if(tmp.matches(".*"+digitsName.concat(preDigitsName)+".*")) {
tmp = tmp.replaceAll(digitsName.concat(preDigitsName), digitsName);
if(digitsName != "" && !(digitsName.equals(""))) {
tmp = tmp.replaceAll(digitsName, digitsName+"零");
tmp = tmp.replaceAll("零零", "零");
//System.out.println("===138");
}
}
preDigitsName = digitsName;
//java.util.regex.Pattern.matches(regex, input)
}
//end of lin
if(tmp.endsWith("零")) {
tmp = tmp.substring(0,tmp.length()-1);
}
tmp = tmp.concat("圓");
if(tmp.startsWith("圓")) {
tmp = tmp.substring(1);
}
//轉小數
if(strMoneys[1].equals("00")) {
return tmp.concat("整");
}
else {
String rstr = "";
String tmpstr = strMoneys[1].substring(0, 1);
String ret = Convert1Digit(tmpstr,-2);
if(ret != "零" && !(ret.equals("零"))) {
rstr = ret.concat("角");
}
else if(tmp != "") {
rstr = "零";
}
tmpstr = strMoneys[1].substring(1, 2);
rstr = rstr.concat(Convert1Digit(tmpstr,-2) + "分");
return tmp.concat(rstr);
}
}
// digit為-1時是個位-2是小數位不加位名稱直接返回大寫數
private String Convert1Digit(String str,int digit) {
StringBuffer reStr = new StringBuffer("");
//System.out.println ("length:"+reStr.length());
int num = java.lang.Integer.parseInt(str);
if(digit != -2 && num == 0) {//整數對零的處理
if(digit >= 0 && setDigits.contains(digits.get(digit))) {//萬位和億位是零要念一個萬或億
reStr.append(digits.get(digit));
}
else {
reStr.append("零");
}
return reStr.toString();
}
// digit = -1 為個位
switch(num) {//取值名稱,
case 0: reStr.append("零"); break;
case 1: reStr.append("壹"); break;
case 2: reStr.append("貳"); break;
case 3: reStr.append("叁"); break;
case 4: reStr.append("肆"); break;
case 5: reStr.append("伍"); break;
case 6: reStr.append("陸"); break;
case 7: reStr.append("柒"); break;
case 8: reStr.append("捌"); break;
case 9: reStr.append("玖"); break;
}
// -1為個位-2為小數,
if(digit >= 0 ) {//取位名稱
reStr.append(digits.get(digit));
}
return reStr.toString();
}
//test===
public static void main(String[] args) throws Exception {
Rmb rmb = new Rmb();
System.out.println(rmb.run(-45050000000122.2155));
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -