支持千兆的小写金额转中文大写金额
import java.io.*;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
public class Money
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif) {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) static final String[] digits = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) static final String[] units = {"仟", "佰", "拾", "兆", "仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "元"};
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) public static String display(String money) {
if (money==null || money.trim().length()==0)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return "零元整";
}
money = money.trim();
if (money.matches("0") || money.matches("\\."))
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return "零元整";
}
StringBuffer sub = new StringBuffer("");
int dotPos = 0;
String head = "";
String tail = "";
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
dotPos = money.lastIndexOf(".");
if (dotPos==-1)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
head = money;
tail = "00";
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) else {
head = money.substring(0,dotPos);
tail = money.substring(dotPos+1);
}
if (tail.length()==1)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
tail +="0";
}
sub.append(parseHead(head));
sub.append(parseTail(tail));
return sub.toString();
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) static String parseHead(String head) {
System.out.println("head = ["+head+"]");
if (head.length()==0 || head.equals("0"))
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return "";
}
StringBuffer sub = new StringBuffer("");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
if (head.length()==0)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return head;
}
if (head.length()>units.length)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
throw new RuntimeException("String too long. supported max size: "+units.length+", actual size: "+head.length());
}
int uIndex = 0;//单位的起始索引
if (head.length()!=units.length)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
uIndex = units.length-head.length();
}
int zero = 0; //'0'标志
for (int i=0;i<head.length() ;i++ )
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
int d = Integer.parseInt(String.valueOf(head.charAt(i)));
//处理'0'
if (d==0)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
int pos = head.length()-i;
switch (pos)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
case 13:
if (zero!=3) sub.append("兆");
if (zero!=0) zero=0;
break;
case 9:
if (zero!=3) sub.append("亿");
if (zero!=0) zero=0;
break;
case 5:
if (zero!=3) sub.append("万");
if (zero!=0) zero=0;
break;
default:
zero++;
}
if (i==head.length()-1)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
sub.append("元");
}
continue;
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if (zero>0) {
sub.append(digits[0]);
zero=0;
}
sub.append(digits[d]);
sub.append(units[uIndex+i]);
}
return sub.toString();
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) static String parseTail(String tail) {
StringBuffer sub = new StringBuffer("");
if (tail==null)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
throw new RuntimeException("Unsupported argument null");
}
if (tail.length()==0 || tail.equals("00"))
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return "整";
}
int d = Character.digit(tail.charAt(0),10);
sub.append(digits[d]);
if (d!=0)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
sub.append("角");
}
sub.append(digits[Character.digit(tail.charAt(1),10)]).append("分");
return sub.toString();
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
public static void main(String[] args) throws IOException
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (true)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
System.out.print("\n输入: ");
String r=in.readLine();
if (r.equals("end"))
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
break;
}
System.out.println("大写: "+display(r));
}
}
}
|