Java 實現金額小寫轉大寫
話不多說,放碼出來。。。
package oracleTestProject;
import java.text.DecimalFormat;
public class MyTest2020040501 {
public static void main(String[] args) throws Exception {
try {
String str = numberToChinese(3123214.70);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String numberToChinese(double paramDouble) {
DecimalFormat localDecimalFormat = new DecimalFormat("############0.00");
String str1 = localDecimalFormat.format(paramDouble);
int i = str1.indexOf(".");
if (str1.substring(i).compareTo(".00") == 0) {//如果小數位全是0,直接截掉小數點和小數位數字
str1 = str1.substring(0, i);
}
String IntStr = "";//整數位字符串
String[] arrayOfString1 = new String[4];
String[] arrayOfString2 = new String[4];
String[] arrayOfString3 = new String[2];
String[] NumberOfChinese = new String[10];
String str3 = "";
String str4 = "";//小數位字符串
String sChineseStr = "";//返回大寫金額字符串
String sYuan = "元";
String sZheng = "整";
int j = 0;
int k = 0;
int m = 0;
arrayOfString1[0] = "";
arrayOfString1[1] = "拾";
arrayOfString1[2] = "佰";
arrayOfString1[3] = "仟";
arrayOfString2[0] = "";
arrayOfString2[1] = "萬";
arrayOfString2[2] = "億";
arrayOfString2[3] = "萬";
arrayOfString3[0] = "分";
arrayOfString3[1] = "角";
NumberOfChinese[0] = "零";
NumberOfChinese[1] = "壹";
NumberOfChinese[2] = "貳";
NumberOfChinese[3] = "叄";
NumberOfChinese[4] = "肆";
NumberOfChinese[5] = "伍";
NumberOfChinese[6] = "陸";
NumberOfChinese[7] = "柒";
NumberOfChinese[8] = "捌";
NumberOfChinese[9] = "玖";
//小數位整數位都爲0,返回零元整
if ((str1.compareTo("0") == 0) || (str1.compareTo("0.0") == 0) || (str1.compareTo("0.00") == 0)) {
sChineseStr = NumberOfChinese[0] + sYuan + sZheng;
return sChineseStr;
}if (str1.indexOf(".") > 0){//整數位小數位都不爲0的
IntStr = str1.substring(0, str1.indexOf("."));//Instr='123214'
}else{//整數位不爲0小數位爲0
IntStr = str1;
}
/******************************整數位轉換計算開始******************************/
//四位一份,
j = IntStr.length() % 4 != 0 ? IntStr.length() / 4 + 1 : IntStr.length() / 4;
int i1;
for (int n = j; n >= 1; n--) {
if ((n == j) && (IntStr.length() % 4 != 0)){
m = IntStr.length() % 4;
}else{
m = 4;
}
str3 = IntStr.substring(k, k + m);
for (i1 = 0; i1 < str3.length(); i1++) {
int inum = Integer.parseInt(str3.substring(i1, i1 + 1));
if (inum != 0) {
sChineseStr = sChineseStr + NumberOfChinese[inum] + arrayOfString1[(str3.length() - i1 - 1)];
}else if ((i1 + 1 < str3.length()) && (str3.charAt(i1 + 1) != '0')){
sChineseStr = sChineseStr + NumberOfChinese[0];
}
}
k += m;
if (n < j) {
if ((Integer.parseInt(str3.substring(str3.length() - 1, str3.length())) != 0) || (Integer.parseInt(str3.substring(str3.length() - 2, str3.length() - 1)) != 0) || (Integer.parseInt(str3.substring(str3.length() - 3, str3.length() - 2)) != 0) || (Integer.parseInt(str3.substring(str3.length() - 4, str3.length() - 3)) != 0)){
sChineseStr = sChineseStr + arrayOfString2[(n - 1)];
}
}
else sChineseStr = sChineseStr + arrayOfString2[(n - 1)];
}
if (sChineseStr.length() > 0) {
sChineseStr = sChineseStr + sYuan;
}
/***********************整數位轉換計算結束*************************************/
/***********************小數位轉換計算開始*************************************/
if (str1.indexOf(".") > 0) {//還存在小數位,說明小數位有非0數字
str4 = str1.substring(str1.indexOf(".") + 1);
for (i1 = 0; i1 < 2; i1++) {//存在小數位則有兩位,
int inum = Integer.parseInt(str4.substring(i1, i1 + 1));
if (inum != 0) {
sChineseStr = sChineseStr + NumberOfChinese[inum] + arrayOfString3[(1 - i1)];
} else if (sChineseStr.length() > 0)
sChineseStr = sChineseStr + NumberOfChinese[0];
}
} else {
sChineseStr = sChineseStr + sZheng;
}
/***********************小數位轉換計算結束*************************************/
/**去掉最後一個零(最後一位是零說明str1有小數位且百分位爲0,即有效金額位數到角,沒有分後面需要加上“整”)**/
if (NumberOfChinese[0].equals(sChineseStr.substring(sChineseStr.length() - 1))){
sChineseStr = sChineseStr.substring(0, sChineseStr.length() - 1) + sZheng;
}
return sChineseStr;
}
}
實現效果:
如有不妥之處歡迎指正,感謝支持!