之前在项目中有对会计方面的处理需求,其中包括凭证中的小写转大写。在会计金额的大写在写法上是需要遵守一些指定的规范,不可随意书写。因此,特意写了一个方法,支持最大到亿及以下到分的金额的写法。
private String[] bigNumber = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
private String getSupNumber(long allMoney){
StringBuffer stringBuffer = new StringBuffer("人民币");
long sum = allMoney;
boolean firstNoZero = false;
int index = 0;
for (long x = 10000000000l; x > 0; x /= 10) {
int value = (int) (sum / x);
if (sum >= x)
firstNoZero = true;
switch (index) {
case 0:
if (firstNoZero && value != 0)
stringBuffer.append(bigNumber[value]).append("亿");
break;
case 1:
case 5:
if (firstNoZero && value != 0)
stringBuffer.append(bigNumber[value]).append("仟");
break;
case 2:
case 6:
if (firstNoZero && value != 0)
stringBuffer.append(bigNumber[value]).append("佰");
break;
case 3:
case 7:
if (firstNoZero && value != 0)
stringBuffer.append(bigNumber[value]).append("拾");
break;
case 4:
if (firstNoZero) {
if (value != 0) {
if (allMoney > 10000000 && allMoney / 10000000 % 10 == 0) {
stringBuffer.append(bigNumber[0]);
}
stringBuffer.append(bigNumber[value]).append("万");
} else if (allMoney % 10000000000l / 1000000 > 0) {
stringBuffer.append("万");
}
}
break;
case 8:
if (firstNoZero) {
if (value != 0) {
if (allMoney > 1000 && allMoney / 1000 % 10 == 0) {
stringBuffer.append(bigNumber[0]);
}
stringBuffer.append(bigNumber[value]);
}
} else {
stringBuffer.append(bigNumber[0]);
}
stringBuffer.append("元");
if (allMoney > 100 && allMoney % 100 == 0)
stringBuffer.append("整");
break;
case 9:
if (value != 0) {
stringBuffer.append(bigNumber[value]).append("角");
if (allMoney % 10 == 0)
stringBuffer.append("整");
} else if (allMoney % 10 != 0) {
stringBuffer.append(bigNumber[0]);
}
break;
case 10:
if (value != 0)
stringBuffer.append(bigNumber[value]).append("分");
break;
}
index++;
sum %= x;
}
String str = stringBuffer.toString();
return (str.equals("人民币零元") ? "" : str);
}
示例如下: