日期:2014-05-20  浏览次数:20989 次

人民币大小写转换问题
java代码如何把数字如1987.25元转化为壹仟玖佰捌拾柒元贰角伍分

------解决方案--------------------
建立一个二维数组咯!然后讲大小写对应输入到二维数组当中,最后对这个float数字进行按位提取,分别提取万、千、百、十、元、角、分的各位,最后再组合成大写就可以了。
------解决方案--------------------
这种小东西,还是自己动手写写的好吧。
------解决方案--------------------
我博客里有代码
------解决方案--------------------
have a try~

public static String toChineseCurrency(Object o) {
if(o instanceof Number) {
String s = new DecimalFormat( "#.00 ").format(o);
System.out.println(s);
s = s.replaceAll( "\\. ", " ");
char[] digit = { '零 ', '壹 ', '贰 ', '叁 ', '肆 ',
'伍 ', '陆 ', '柒 ', '捌 ', '玖 '};
String unit = "仟佰拾兆仟佰拾亿仟佰拾万仟佰拾元角分 ";
int l = unit.length();
StringBuilder sb = new StringBuilder(unit);
for(int i=s.length()-1; i> =0; i--)
sb = sb.insert(l-s.length()+i, digit[(s.charAt(i) - 0x30)]);
s = sb.substring(l-s.length(), l+s.length());
s = s.replaceAll( "零[拾佰仟] ", "零 ").
replaceAll( "零{2,} ", "零 ").
replaceAll( "零兆 ", "兆 ").
replaceAll( "零万 ", "万 ").
replaceAll( "零元 ", "元 ").
replaceAll( "零[角分] ", " ")
;
return s;
} else {
throw new NumberFormatException();
}
}
------解决方案--------------------
这个正解.(zephyr_cc())我支持.
------------------------------------------------
这个blog里的有bug(http://blog.csdn.net/davis129/archive/2006/08/27/1127374.aspx)
我输入100035.53,输出(壹拾零叁拾伍圆伍角叁分)中间少了个万.应该是(壹拾万零叁拾伍圆伍角叁分).
------解决方案--------------------
package net.yilin.util;

public class Transform{
private double number; //人民币金额
private StringBuffer capitalize = new StringBuffer(); //人民币大写形式
private int integer; //整数部分
private int decimal = 0; //小数部分

/*构造方法*/
public Transform(double number){
this.number = number;
init();
}
/*获取结果*/
public String getString(){
return capitalize.toString();
}
/*打印接口*/
public void display(){
System.out.print( "\n您输入数的人民币大写形式为: ");
System.out.println(getString()+ "\n ");
}
/*初始化*/
private void init(){
String str1,str2;
int index;

integer = (int)number;

str1 = Double.toString(number-integer)+ "00 ";
index = str1.indexOf( '. ');
if(index != -1){
str2 = str1.substring(index+1);
decimal = (str2.charAt(0)-48)*10 + (str2.charAt(1)-48);
}

}

/* 单位数字的转换 */
private void digit(int i){
switch(i){
case 0 :
capitalize.append( "零 ");
break;
case 1 :
capitalize.append( "壹 ");
break;
case 2 :
capitalize.append( "贰 ");
break;
case 3 :
capitalize.append( "叁 ");
break;
case 4 :
capitalize.append( "肆 ");
break;
case 5 :
capitalize.append( "伍 ");
break;
case 6 :
capitalize.append( "陆 ");
break;
case 7 :
capitalize.append( "柒 ");