30行,金額轉人民幣大寫的代碼

來源:互聯網
上載者:User

金額轉人民幣大寫是一種常見的要求,但是這一看似簡單的要求,實現起來卻並不容易。

前不久,我被問到了這樣一道題,當時寫了個演算法,昨天晚上又和BJDP的人們討論了一下,覺得很有必要把這個演算法寫下來。

總共37行,去掉空行還不到30行,就不多囉嗦解釋了。

 

 1 public class ChineseCurrencyConverter { 2  3     private static final String[] UNITS = {"億","仟","佰","拾","萬","仟","佰","拾","" }; 4     private static final String[] CHINESE_NUMBER = {"零","壹","貳","三","肆","伍","陸","柒","捌","玖"}; 5  6     public static String convert(long yuan) { 7  8         if (yuan >= 1e9 || yuan < 0) { 9             return "這個數字超出解析範圍了";10         }11         String amount = String.valueOf(yuan);12         int len = amount.length();13         int unitsLen = UNITS.length;14 15         String chineseCurrency = "";16         for (int i = len - 1; i >= 0; i--) {17             chineseCurrency = number(amount.charAt(i)) + unit(amount.charAt(i), unitsLen - len + i) +chineseCurrency;18         }19 20         chineseCurrency = chineseCurrency.replaceAll("零+","零");21         chineseCurrency =  chineseCurrency + "元整";22         chineseCurrency = chineseCurrency.replaceAll("零萬","萬");23         chineseCurrency = chineseCurrency.replaceAll("零元","元");24         return chineseCurrency;25     }26 27     private static String number(char number) {28         return CHINESE_NUMBER[Integer.parseInt(String.valueOf(number))];29     }30 31     private static String unit(char number, int pos) {32         if(number == '0' && pos != UNITS.length - 5) {33             return "";34         }35         return UNITS[pos];36     }37 }

 

 

下面是一些用來測試的代碼:

 1 public class TestConverter  { 2  3     public static void main(String[] args) { 4         System.out.println(ChineseCurrencyConverter.convert(100)); 5         System.out.println(ChineseCurrencyConverter.convert(130)); 6         System.out.println(ChineseCurrencyConverter.convert(102)); 7         System.out.println(ChineseCurrencyConverter.convert(124)); 8         System.out.println(ChineseCurrencyConverter.convert(1000)); 9         System.out.println(ChineseCurrencyConverter.convert(10000));10         System.out.println(ChineseCurrencyConverter.convert(100000));11         System.out.println(ChineseCurrencyConverter.convert(1000000));12         System.out.println(ChineseCurrencyConverter.convert(10000000));13         System.out.println(ChineseCurrencyConverter.convert(10000000));14         System.out.println(ChineseCurrencyConverter.convert(100000000));15         System.out.println(ChineseCurrencyConverter.convert(1000000000));16         System.out.println(ChineseCurrencyConverter.convert(1002));17         System.out.println(ChineseCurrencyConverter.convert(1020));18         System.out.println(ChineseCurrencyConverter.convert(1200));19         System.out.println(ChineseCurrencyConverter.convert(10003));20         System.out.println(ChineseCurrencyConverter.convert(10030));21         System.out.println(ChineseCurrencyConverter.convert(10033));22         System.out.println(ChineseCurrencyConverter.convert(10330));23         System.out.println(ChineseCurrencyConverter.convert(13030));24         System.out.println(ChineseCurrencyConverter.convert(100030));25         System.out.println(ChineseCurrencyConverter.convert(100003));26         System.out.println(ChineseCurrencyConverter.convert(100300));27         System.out.println(ChineseCurrencyConverter.convert(103000));28         System.out.println(ChineseCurrencyConverter.convert(100303));29         System.out.println(ChineseCurrencyConverter.convert(1000004));30         System.out.println(ChineseCurrencyConverter.convert(10000005));31         System.out.println(ChineseCurrencyConverter.convert(10000006));32         System.out.println(ChineseCurrencyConverter.convert(12000006));33         System.out.println(ChineseCurrencyConverter.convert(10030006));34         System.out.println(ChineseCurrencyConverter.convert(10200006));35         System.out.println(ChineseCurrencyConverter.convert(100000007));36         System.out.println(ChineseCurrencyConverter.convert(1000000008));37 38     }39 }

 

這些數字測試的結果還都正確。

這裡沒有處理角和分,留給有想法的同學去嘗試一下吧。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.