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;
}
}
实现效果:
如有不妥之处欢迎指正,感谢支持!