java数字转汉字工具类详解
本文实例为大家分享了java数字转汉字工具类的具体代码,供大家参考,具体内容如下
/** *Createdby33303on2017/7/28. */ importjava.math.BigDecimal; /** *数字转换为汉语中人民币的大写
* */ publicclassNumberToCN{ /** *汉语中数字大写 */ privatestaticfinalString[]CN_UPPER_NUMBER={"零","壹","贰","叁","肆", "伍","陆","柒","捌","玖"}; /** *汉语中货币单位大写,这样的设计类似于占位符 */ privatestaticfinalString[]CN_UPPER_MONETRAY_UNIT={"分","角","元", "拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","兆","拾", "佰","仟"}; /** *特殊字符:整 */ privatestaticfinalStringCN_FULL="整"; /** *特殊字符:负 */ privatestaticfinalStringCN_NEGATIVE="负"; /** *金额的精度,默认值为2 */ privatestaticfinalintMONEY_PRECISION=2; /** *特殊字符:零元整 */ privatestaticfinalStringCN_ZEOR_FULL="零元"+CN_FULL; /** *把输入的金额转换为汉语中人民币的大写 * *@paramnumberOfMoney *输入的金额 *@return对应的汉语大写 */ publicstaticStringnumber2CNMontrayUnit(BigDecimalnumberOfMoney){ StringBuffersb=newStringBuffer(); //-1,0,or1asthevalueofthisBigDecimalisnegative,zero,or //positive. intsignum=numberOfMoney.signum(); //零元整的情况 if(signum==0){ returnCN_ZEOR_FULL; } //这里会进行金额的四舍五入 longnumber=numberOfMoney.movePointRight(MONEY_PRECISION) .setScale(0,4).abs().longValue(); //得到小数点后两位值 longscale=number%100; intnumUnit=0; intnumIndex=0; booleangetZero=false; //判断最后两位数,一共有四中情况:00=0,01=1,10,11 if(!(scale>0)){ numIndex=2; number=number/100; getZero=true; } if((scale>0)&&(!(scale%10>0))){ numIndex=1; number=number/10; getZero=true; } intzeroSize=0; while(true){ if(number<=0){ break; } //每次获取到最后一个数 numUnit=(int)(number%10); if(numUnit>0){ if((numIndex==9)&&(zeroSize>=3)){ sb.insert(0,CN_UPPER_MONETRAY_UNIT[6]); } if((numIndex==13)&&(zeroSize>=3)){ sb.insert(0,CN_UPPER_MONETRAY_UNIT[10]); } sb.insert(0,CN_UPPER_MONETRAY_UNIT[numIndex]); sb.insert(0,CN_UPPER_NUMBER[numUnit]); getZero=false; zeroSize=0; }else{ ++zeroSize; if(!(getZero)){ sb.insert(0,CN_UPPER_NUMBER[numUnit]); } if(numIndex==2){ if(number>0){ sb.insert(0,CN_UPPER_MONETRAY_UNIT[numIndex]); } }elseif(((numIndex-2)%4==0)&&(number%1000>0)){ sb.insert(0,CN_UPPER_MONETRAY_UNIT[numIndex]); } getZero=true; } //让number每次都去掉最后一个数 number=number/10; ++numIndex; } //如果signum==-1,则说明输入的数字为负数,就在最前面追加特殊字符:负 if(signum==-1){ sb.insert(0,CN_NEGATIVE); } //输入的数字小数点后两位为"00"的情况,则要在最后追加特殊字符:整 if(!(scale>0)){ sb.append(CN_FULL); } returnsb.toString(); } publicstaticvoidmain(String[]args){ doublemoney=2020004.01; BigDecimalnumberOfMoney=newBigDecimal(money); Strings=NumberToCN.number2CNMontrayUnit(numberOfMoney); System.out.println("你输入的金额为:【"+money+"】#--#["+s.toString()+"]"); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。