java 人民币大写_Java实现人民币大写精讲

packagecom.tfj.algorithm;importjava.util.Scanner;public classRenMingBi {private booleanzero;

String[] strHan= { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};

String[] moneyCount= { "", "拾", "佰", "仟"};

RenMingBi() {

zero= false;

}private String[] divide(doubledigitalRmbValue) {//处理整数

long intPart = (long) (digitalRmbValue);//处理小数,把小数转换成整数形式处理,并进行四舍五入,此时小数四舍五入之后为100的应该另外加一层处理

long decimalPart =Math

.round((double) Math.round((digitalRmbValue - intPart) * 10000) / 100);//System.out.println("整数部分为:" + intPart + "小数部分为:" + (digitalRmbValue - intPart));

if (decimalPart == 100) {

intPart+= 1;

}//System.out.println("四舍五入之后整数部分为:" + intPart + "小数部分为:" + decimalPart);

String strIntPart= "";if (intPart == 0)

strIntPart= "0";else{

strIntPart= "" +intPart;

}

String strDecimalPart= "";if (decimalPart < 10 && decimalPart >= 0)

strDecimalPart= "0" +decimalPart;else{

strDecimalPart= "" +decimalPart;

}//处理输入为0的时候

if (intPart == 0 && decimalPart == 0) {

zero= true;

}//System.out.println("准换为String后,整数部分为:" + strIntPart + "小数部分为:" + strDecimalPart);

return newString[] { strIntPart, strDecimalPart };

}//用来转换小数部分

privateString transDecimal(String str) {if (str.equals("100") || str.equals("00")) {return "零角零分";

}else{

String strResult;char[] strRmb = new char[20];

strRmb=str.toCharArray();if (strRmb[0] == '0' && strRmb[1] == '0') {

strResult= "";

}else{int dm = strRmb[0] - '0';int dn = strRmb[1] - '0';

strResult= strHan[dm] + "角" + strHan[dn] + "分";

}returnstrResult;

}

}//用来转换整数部分

privateString transInt(String str) {char[] firstFourBitRmb = new char[20];

firstFourBitRmb=str.toCharArray();int len =firstFourBitRmb.length;

String strResult= "";for (int i = 0; i < len; i++) {/*** 这里开启之后会显示成通俗易懂的格式,例如1001,会转化为:壹仟零壹元,而不是:壹仟零佰零拾壹元, 但我希望得到的是后面这种,因为发票所需显示的就是后面这种

**/

//if (firstFourBitRmb[i] == '0' && i < len) {//boolean zeroFlag = false;//while (i < len && firstFourBitRmb[i] == '0') {//zeroFlag = true;//i++;//}//if (i != len && zeroFlag == true)//strResult += "零";//i--;//} else {//int m = firstFourBitRmb[i] - '0';//strResult += strHan[m] + moneyCount[len - i - 1];//}

int m = firstFourBitRmb[i] - '0';

strResult+= strHan[m] + moneyCount[len - i - 1];

}returnstrResult;

}publicString transComb() {

String[] strTempRmb= new String[2];double strValue =0D;

Scanner sc= newScanner(System.in);

System.out.println("请输入具体金额,结果会精确到分:");

strValue=sc.nextDouble();

RenMingBi nr= newRenMingBi();

strTempRmb=nr.divide(strValue);//转换小数部分

String result1 = nr.transDecimal(strTempRmb[1]);//转换整数部分

String result2 = "";int len = strTempRmb[0].length();if (len > 12)return "数据过大,无法进行转换,请重新输入!";else{if (len >= 9) {

String strBit1= strTempRmb[0].substring(0, len - 8);

String strBit2= strTempRmb[0].substring(len - 8, len - 4);

String strBit3= strTempRmb[0].substring(len - 4, len);

String strResult1= nr.transInt(strBit1) + "亿";

String strResult2= nr.transInt(strBit2) + "万";

String strResult3= nr.transInt(strBit3) + "元";

result2= strResult1 + strResult2 +strResult3;

}else if (len >= 5) {

String strBit1= strTempRmb[0].substring(0, len - 4);

String strBit2= strTempRmb[0].substring(len - 4, len);

String strResult1= nr.transInt(strBit1) + "万";

String strResult2= nr.transInt(strBit2) + "元";

result2= strResult1 +strResult2;

}else if (len >= 1) {if (nr.zero == true) {

result2= "零元";

}elseresult2= nr.transInt(strTempRmb[0]) + "元";

}return result2 +result1;

}

}public static voidmain(String[] args) {

RenMingBi rmb= newRenMingBi();while (true) {

System.out.println(rmb.transComb());

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值