資本Javaのデジタル変換アルゴリズムの量

人民元の資本基準の量によると、変換は注意すべき点がいくつかあります。

ときに真ん中の中国の資本量のアラビア数字「0」の真ん中には、単に「ゼロ」という単語を書くことができます。¥1,409.50として、人民元千Sibaiゼロナインラウンド呉交通を記述する必要があります。
こうした¥6,007.14としてだけで「ゼロ」の文字を書くことができます中央の中国の資本量のいくつかの中間の連続したアラビア数字「0」は、ありますが、書かれるべき元呂一角ストアポイントラウンド千ゼロチー。
万元のビットが「0」であるが、千ビット「0」アラビア数字1万や金額ビットが「0」である、またはデジタル中級連続したいくつかのがありますが、角度位置は「0」ではない、の量で、中国の首都1ワードのみがゼロに書き込むことができ、このような¥1,680.32として「ゼロ」の文字を書くことができない、人民元千呂白>デルタIIバシーの元ゼロポイント、または書面による人民元千元呂白バシーの三角形IIを記述する必要があります点;および¥107,000.53場合、人民元に書き込まれ、チー銭ウー交通三分の100,000、またはチー銭呉交通-第三ラウンドのRMB 100,000書き込まなければなりません。
デジタル角度位置のアラブの量が「0」で、サブビットが背後に「0」、中国の資本金の額「メタ」ではありませんしながら、「ゼロ」の単語を書く必要があります。¥16,409.02として1000土地1万RMB元SibaiゼロゼロII 9分を書き込まなければならない。別の例¥325.04、ゼロ円二十300 RMBストア点として書かれるべきです。
「ドル」後まで「ドル」への資本金額はない「分」の後、「全体」または「正」という言葉を書くことができない「角度」の後、「全体」または「正」の単語を記述する必要があります「全体」または「正」という言葉を書きます。

基本的な考え方、4それぞれのグループは、表す数千人は、数百人は、ピックアップし、その後、百万ドル、またはラウンドを追加しますので、0の重複がある場合、無視したいです

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();
    }
 
 
    private static final char[] CN_UPPER_NUMBER = "零壹贰叁肆伍陆柒捌玖".toCharArray();
    private static final char[] CN_UPPER_UNIT = "仟佰拾".toCharArray();
    private static final char[] CN_GROUP = "圆万亿".toCharArray();

https://www.cnblogs.com/xcr1234/p/9140867.htmlからの振替

おすすめ

転載: www.cnblogs.com/ibigboy/p/10980861.html