請在后臺配置參數,參數名稱:topads
編程語言 php java

Java實現的數字中文大寫(正寫)轉換

java HTML我幫您 1年前  6425次瀏覽
Java實現的數字中文大寫(正寫)轉換
public class CnNumberFormat {

/**
* 中文數字正寫
*/
private static final char<> cnNumbers = { '零', '壹', '貳', '叁', '肆', '伍',
'陸', '柒', '捌', '玖' };

private static final char<> stdNumbers = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9' };

/**
* 貨幣單位
*/
// 順序不能變,否則下面的實現代碼頁需要同步修改
private static final char<> units = { '厘', '分', '角', '元', '拾', '佰', '仟',
'萬', '拾', '佰', '仟', '億', '拾', '佰', '仟' };

/**
* 是否輸出貨幣單位元角分的完整格式,簡單格式通常用于套打紙張上已印有貨幣單位的情形。
*/
private static boolean fullFormat = true;


/**
* 取得大寫形式的字符串
*
* @return 中文正寫的數字字符串
*/
public static String format(double d) {
NumberFormat nf = new DecimalFormat("#.###");
String original = String.valueOf(nf.format(d));
return transform(original);
}

public static String format(long ln) {
return transform(String.valueOf(ln));
}

public static String transform(String original) {
String integerPart = "";
String floatPart = "";
if(StringUtils.endsWith(original, ".00")){
original = original.substring(0,original.indexOf(".00"));
}
if (original.indexOf(".") > -1) {
int dotIndex = original.indexOf(".");
integerPart = original.substring(0, dotIndex);
floatPart = original.substring(dotIndex + 1);
} else {
integerPart = original;
}
StringBuffer sb = new StringBuffer();

// 整數部分處理
for (int i = 0; i < integerPart.length(); i++) {
int number = Integer
.parseInt(String.valueOf(integerPart.charAt(i)));
sb.append(cnNumbers);
if (fullFormat) {
sb.append(units);
}
}

// 小數部分處理
if (floatPart.length() >= 1) {
for (int i = 0; i < floatPart.length(); i++) {
int number = Integer.parseInt(String.valueOf(floatPart
.charAt(i)));
sb.append(cnNumbers);
if (fullFormat && i < 3) {
sb.append(units<2 - i>);
}
}
} else if (fullFormat) {
sb.append('整');
}

return sb.toString();

}

/**
* 將中文大寫數字字符串轉換成對應的數字類型
*
* @param cnNumStr
* @return Java Number類型對象
*/
public static Number parse(String cnNumStr) {
if (null == cnNumStr || "".equals(cnNumStr.trim())) {
return null;
}
cnNumStr = cnNumStr.replaceAll("整", "");
if (!cnNumStr.endsWith("元")) {
cnNumStr = cnNumStr.replaceAll("元", ".");
}
for (int i = 0; i < cnNumbers.length; i++) {
cnNumStr = cnNumStr.replace(cnNumbers, stdNumbers);
}
for (int j = 0; j < units.length; j++) {
cnNumStr = cnNumStr.replaceAll(units + "", "");
}
BigDecimal b = new BigDecimal(cnNumStr);
return b;
}

/**
* @param args
*/
public static void main(String<> args) {
System.out.println(CnNumberFormat.transform("null"));
System.out.println(CnNumberFormat.format(123456789));
System.out.println(CnNumberFormat.format(.123456789));
System.out.println(CnNumberFormat.format(0.1234));
System.out.println(CnNumberFormat.format(1));
System.out.println(CnNumberFormat.format(12));
System.out.println(CnNumberFormat.format(123));
System.out.println(CnNumberFormat.format(1234));
System.out.println(CnNumberFormat.format(12345));
System.out.println(CnNumberFormat.format(123456));
System.out.println(CnNumberFormat.format(1234567));
System.out.println(CnNumberFormat.format(12345678));
System.out.println(CnNumberFormat.format(123456789));
System.out.println(CnNumberFormat.parse("壹億貳仟叁佰肆拾伍萬陸仟柒佰捌拾玖元壹角貳分叁厘"));
}
}

發表評論

2017怎样手机上赚钱