package com;
import java.util.Scanner;
public class RenMingBi {
private boolean zero;
String[] strHan = { "零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖" };
String[] moneyCount = { "", "拾", "佰", "仟" };
RenMingBi() {
zero = false;
}
private String[] divide(double digitalRmbValue) {
// 處理整數
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 new String[] { strIntPart, strDecimalPart };
}
// 用來轉換小數部分
private String 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] + "分";
}
return strResult;
}
}
// 用來轉換整數部分
private String 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];
}
return strResult;
}
public String transComb() {
String[] strTempRmb = new String[2];
double strValue = 0D;
Scanner sc = new Scanner(System.in);
System.out.println("請輸入具體金額,結果會精確到分:");
strValue = sc.nextDouble();
RenMingBi nr = new RenMingBi();
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 = "零元";
} else
result2 = nr.transInt(strTempRmb[0]) + "元";
}
return result2 + result1;
}
}
public static void main(String[] args) {
RenMingBi rmb = new RenMingBi();
while (true) {
System.out.println(rmb.transComb());
}
}
}
Java實現人民幣大寫代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.