读书人

人民币大小写分析,该如何解决

发布时间: 2011-12-29 22:09:38 作者: rapoo

人民币大小写分析
以下这个程序是我从一个高手那里拿来的,但是处理0的那一部分我实在是看不懂,请各位帮忙,分不多(没有分了,这是全部家档).先谢了.
public class changeToBig{
public static void main(String [] args){
char[] hunit={ '拾 ', '佰 ', '仟 '}; //段内位置表示
char[] vuni{ '万 ', '亿 '}; //段名表示
char[] digit={ '零 ', '壹 ', '贰 ', '叁 ', '肆 ', '伍 ', '陆 ', '柒 ', '捌 ', '玖 '}; //数字表示
double value = 1001001.00;
long midVal = (long)(value*100); //转化成整形
String valStr=String.valueOf(midVal); //转化成字符串
String head=valStr.substring(0,valStr.length()-2); //取整数部分
String rail=valStr.substring(valStr.length()-2); //取小数部分



String prefix= " "; //整数部分转化的结果
String suffix= " "; //小数部分转化的结果
//处理小数点后面的数
if(rail.equals( "00 ")){ //如果小数部分为0
suffix= "整 ";
} else{
suffix=digit[rail.charAt(0)- '0 ']+ "角 "+digit[rail.charAt(1)- '0 ']+ "分 "; //否则把角分转化出来


}
//处理小数点前面的数
char[] chDig=head.toCharArray(); //把整数部分转化成字符数组
char zero= '0 '; //标志 '0 '表示出现过0
byte zeroSerNum = 0; //连续出现0的次数

/////////主要是以下这些看不懂....

for(int i=0;i <chDig.length;i++){
//循环处理每个数字
int idx=(chDig.length-i-1)%4; //取段内位置
int vidx=(chDig.length-i-1)/4; //取段位置
if(chDig[i]== '0 ')
{ //如果当前字符是0
zeroSerNum++; //连续0次数递增
if(zero == '0 ')
{ //标志
zero=digit[0];
}else


if(idx==0 && vidx > 0 &&zeroSerNum < 4)
{
prefix += vunit[vidx-1];
zero= '0 ';
}
continue;
}
zeroSerNum = 0; //连续0次数清零
if(zero != '0 ') { //如果标志不为0,则加上,例如万,亿什么的
prefix+=zero;
zero= '0 ';
}
prefix+=digit[chDig[i]- '0 ']; //转化该数字表示
if(idx > 0) prefix += hunit[idx-1];
if(idx==0 && vidx> 0){
prefix+=vunit[vidx-1]; //段结束位置应该加上段名如万,亿
}


}

if(prefix.length() > 0) prefix += '圆 '; //如果整数部分存在,则有圆的字样
System.out.println(prefix+suffix); //返回正确表示
}
}


[解决办法]
到现在还没有完整的答案
[解决办法]
int idx=(chDig.length-i-1)%4; //取段内位置
int vidx=(chDig.length-i-1)/4; //取段位置

这样就可以把 位数上的数字取出来

[解决办法]
这个是有问题的,试验下100000就知道错误了

读书人网 >J2SE开发

热点推荐