项目需求:将pdf格式合同上的金额改成大写的文字。
拿出来跟大家分享。拿代码的兄弟留个言,我倍感欣慰。。
class="java" name="code">
/**
* 把金额转成人民币大写
* @param n0
* @return
*/
private String money(String n0){
String sChi= "零壹贰叁肆伍陆柒捌玖整分角元拾佰仟万拾佰仟亿拾佰仟万";
if (n0== null || n0 == "") {
return "零元";
} else {
java.text.DecimalFormat df=new java.text.DecimalFormat("0.00");
n0 = df.format(Double.parseDouble(n0));
}
int L=n0.length()-3; //整数部分长度
boolean Z=false, zL, zR;
zL= Long.valueOf( n0.substring(0,L))==0; //整数部分是否为零
zR= Long.valueOf( n0.substring(L+1,L+3))==0; //小数部分是否为零
if (zL && zR) return "零元"; //零值退出
char s0, s1;
StringBuffer sL= new StringBuffer(); //转换后的整数串
StringBuffer sR= new StringBuffer(); //转换后的小数串
int n;
for(int i=0; i<L; i++) //整数部分
{
s0=0; s1=0;
n= n0.charAt(L-i-1)-'0'; //数值
if(!(n==0 &&(Z || i==8 || i==4 || i==0) || zL) ) //Z:前一个字符是否为0
s0= sChi.charAt(n); //值字符
if(!(n==0 &&(i!=8 && i!=4 && i!=0 || Z && i==1) || zL) )
s1= sChi.charAt(i+13); //单位字符
if(s1>0) sL.insert(0, s1);
if(s0>0) sL.insert(0, s0);
Z= n==0; //当前处理的字符是否为0
}
int pos= sL.indexOf("亿万"); //是否有"亿万"
if(pos>0) sL.deleteCharAt(pos+1); //如有则删除
for(int i=0; i<2; i++) //小数部分
{
s0=0; s1=0;
n= n0.charAt(L+2-i)-'0'; //数值
if( n>0 || (n==0 && i==1 && !Z && !zL) ) //大于零、或角位为零而分位大于零
s0= sChi.charAt(n); //值
if( n>0 )
s1= sChi.charAt(i+11); //单位
if( n==0 && i==0 ) //分位为零
s1='整';
if(s1>0) sR.insert(0, s1);
if(s0>0) sR.insert(0, s0);
Z= n==0;
}
sL.append(sR);
return sL.toString();
}