首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2008

Java 實作整數轉中文大寫金額(支援億/萬/仟/佰/拾)

     編輯:SQL Server 2008

演算法思路

  1. 按四位一組分割(符合中文讀數習慣:個/萬/億)
  2. 處理每組四位數:千/百/十/個位對應中文數字與單位
  3. 處理零的讀法:組內連續零只讀一個「零」,組間需補「零」
  4. 組合各組結果,加上「萬」「億」單位

核心程式碼

public class NumberUtil {
    private static final String[] NUM1 = {"零","壹","貳","叁","肆","伍","陸","柒","捌","玖"};
    private static final String[] NUM2 = {"零","拾","佰","仟","萬","億"};

    public static String getNumberStr(int num) {
        if (num < 0) return "";
        if (num == 0) return NUM1[0];

        int split = 10000;
        int yi = num / (split * split);      // 億
        int wan = (num / split) % split;     // 萬
        int ge = num % split;                // 萬以下

        StringBuilder sb = new StringBuilder();

        // 億
        if (yi > 0) { sb.append(getSection(yi)).append(NUM2[5]); }

        // 萬
        if (wan > 999) { sb.append(getSection(wan)).append(NUM2[4]); }
        else if (wan > 0) {
            if (yi > 0) sb.append(NUM2[0]);
            sb.append(getSection(wan)).append(NUM2[4]);
        }

        // 萬以下
        if (ge > 0) {
            if (wan > 0) {
                if (ge > 999) sb.append(getSection(ge));
                else { sb.append(NUM2[0]).append(getSection(ge)); }
            } else if (yi > 0) {
                sb.append(NUM2[0]).append(getSection(ge));
            } else {
                sb.append(getSection(ge));
            }
        }
        return sb.toString();
    }

    private static String getSection(int num) { // 0~9999
        if (num < 0 || num > 9999) return "";
        int q = num / 1000;
        int b = (num / 100) % 10;
        int s = (num / 10) % 10;
        int g = num % 10;
        StringBuilder sb = new StringBuilder();
        if (q > 0) { sb.append(NUM1[q]).append(NUM2[3]); }
        if (b > 0) { sb.append(NUM1[b]).append(NUM2[2]); }
        else if (q > 0) sb.append(NUM2[0]);
        if (s > 0) { sb.append(NUM1[s]).append(NUM2[1]); }
        else if (b > 0) sb.append(NUM2[0]);
        if (g > 0) sb.append(NUM1[g]);
        return sb.toString();
    }

    public static void main(String[] args) {
        int[] tests = {1, 1001, 100101, 10100101, 1234567890};
        for (int n : tests) System.out.println(n + " -> " + getNumberStr(n));
    }
}

執行結果

1 -> 壹
1001 -> 壹仟零壹
100101 -> 壹拾萬零壹佰零壹
10100101 -> 壹仟零壹拾萬零壹佰零壹
1234567890 -> 壹拾貳億叁仟肆佰伍拾陸萬柒仟捌佰玖拾
執行結果截圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved