根据人民币大写金额规范,转换有几点要注意的:
基本思路,每4个一组,表示千、百、拾,然后加上亿、万、圆,这样的,如果有重复的0,需要忽略
java;gutter:true;
public static String moneyToChinese(BigDecimal i_money) {
if(i_money.equals(BigDecimal.ZERO)){
return "零圆整";
}
if (i_money.doubleValue() >= 100000000 || i_money.doubleValue() < 0.01) {
return "";
}
i_money = i_money.setScale(2, RoundingMode.HALF_UP);
String numStr = i_money.toString();
int pointPos = numStr.indexOf('.');
String s_int = null; //整数部分
String s_point = null; //小数部分
if (pointPos >= 0) {
s_int = numStr.substring(0, pointPos);
s_point = numStr.substring(pointPos + 1);
} else {
s_int = numStr;
}
StringBuilder sb = new StringBuilder();
if(!"0".equals(s_int)){
int groupCount = (int) Math.ceil(s_int.length() / 4.0);
for (int group = 0; group < groupCount; group++) {
boolean zeroFlag = true;
boolean noZeroFlag = false;
int start = (s_int.length() % 4 == 0 ? 0 : (s_int.length() % 4 - 4)) + 4 * group;
for (int i = 0; i < 4; i++) {
if (i + start >= 0) {
int value = s_int.charAt(i + start) - '0';
if (value > 0) {
sb.append(CN_UPPER_NUMBER[value]);
if (i < 3) {
sb.append(CN_UPPER_UNIT[i]);
}
zeroFlag = true;
noZeroFlag = true;
} else if (zeroFlag) {
sb.append('零');
zeroFlag = false;
}
}
}
if(sb.charAt(sb.length() - 1) == '零'){
sb.deleteCharAt(sb.length() - 1);
}
if(noZeroFlag || groupCount - group == 1){
sb.append(CN_GROUP[groupCount - group - 1]);
}
}
}
if (s_point == null || "00".equals(s_point)) {
sb.append('整');
}else{
int j = s_point.charAt(0) - '0';
int f = s_point.charAt(1) - '0';
if(j > 0){
sb.append(CN_UPPER_NUMBER[j]).append('角');
if(f != 0){
sb.append(CN_UPPER_NUMBER[f]).append('分');
}
}else if("0".equals(s_int)){
sb.append(CN_UPPER_NUMBER[f]).append('分');
}else {
sb.append('零').append(CN_UPPER_NUMBER[f]).append('分');
}
}
return sb.toString();
}</p>
<pre><code>private static final char[] CN_UPPER_NUMBER = "零壹贰叁肆伍陆柒捌玖".toCharArray();
private static final char[] CN_UPPER_UNIT = "仟佰拾".toCharArray();
private static final char[] CN_GROUP = "圆万亿".toCharArray();
</code></pre>
<p>
Original: https://www.cnblogs.com/xcr1234/p/9140867.html
Author:
Title: java 金额数字转换大写算法
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620316/
转载文章受原作者版权保护。转载请注明原作者出处!