精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

利用結構化的設計看待人民幣大寫轉換

開發 架構
在網上看到不少人民幣大寫轉換的類,或多或少的總有一些問題,不放心用在企業開發上。而且每個人的思路總是天馬行空,別說面向對象的方法,就是面向過程也說不通,充斥著各種各樣的特殊情況。如果少考慮一種情況,那結果就很難預料,而且代碼的可讀性,我實在不敢恭維。

昨天,突然心血來潮,用結構化的思想整理了一遍,在這里就拿出來分享一下。

首先,數字應該分段,分成萬以下的、萬、億、兆這幾個段,并且每個段的長度固定是4個數字。比如說 123456 分為兩個段,前面一個未滿的段:12 ,后面是滿的段:3456 。

其次,每個滿段其實都是個十百千四個單位。比如:12345678 ,轉成數字大寫是:壹仟貳佰叁拾肆  萬  伍仟陸佰柒拾捌,發現什么規律了嗎?

***,就是處理一些必須有 0 的問題了,比如說:303 ,不能說:叁佰叁,應該是:叁佰零叁,這個“零”有很多講究的。

針對這些規律,我有針對性的整理出來兩個方法:SingleConvert 、MultiConvert 。其中 SingleConvert 處理段內的邏輯,MultiConvert 處理段間的邏輯,在段內的數字 0 問題穿插到 SingleConvert 方法中,段間的數字 0 問題穿插到 MultiConvert 方法中。另外,小數部分的處理,只有兩位數字,可以寫死,這個最簡單了。

說一下數字 0 的邏輯。

數字【3003】轉換出來應該是【叁仟零叁】,數字【303】轉換出來應該是【叁佰零叁】,可以看到段內連續出現一個或多個數字 0 的情況下,只會出現一個漢字【零】。

數字【3000000000300】轉換出來應該是【叁兆零叁佰】,數字【300000300】轉換出來應該是【叁億零叁佰】,可以看到段間連續出現一個或多個數字 0 的情況下,只會出現一個漢字【零】。

所以,段內邏輯和段間邏輯,在連續出現多個【零】的時候,只保留一個【零】。

數字【300】轉換出來應該是【叁佰】,數字【3000】轉換出來應該是【叁仟】,可以看到在段內***不管連續出現多少【零】,都抹掉不提。所以,段內邏輯中,末尾的一個或多個【零】,均不保留。

還有兩個不值得提的規律:每個數字對應一個單位,必定是【個十百千】;每段對應一個單位,從低到高的對應是【空、萬、億、兆、……】。原諒我不知大更高的單位是什么了,這輩子沒見過那么多錢,神那~~

然后,然后就沒規律了,下面上代碼:

 
  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Diagnostics; 
  4. using System.Linq; 
  5. using System.Text; 
  6.   
  7. namespace Lenic.Core 
  8.     /// <summary> 
  9.     /// 數字轉大寫漢字字符類 
  10.     /// </summary> 
  11.     [DebuggerStepThrough] 
  12.     public class NumericConvert 
  13.     { 
  14.         #region Private Fields 
  15.         /// <summary> 
  16.         /// 段的分隔字符,從低到高依次增加:空、萬、億、萬億,***不超過萬億的數字都可以 
  17.         /// </summary> 
  18.         public static readonly string[] DefaultRangeNumeric = new string[] { string.Empty, "萬""億""兆" }; 
  19.         /// <summary> 
  20.         /// 位的分隔字符,從低到高依次是:仟、佰、拾、空 
  21.         /// </summary> 
  22.         public static readonly char[] DefaultUnitNumeric = new char[] { '仟''佰''拾'char.MinValue }; 
  23.         /// <summary> 
  24.         /// 數字替換的字符,從低到高依次是:零、壹、貳、叁、肆、伍、陸、柒、捌、玖 
  25.         /// </summary> 
  26.         public static readonly char[] DefaultCharNumeric = new char[] { '零''壹''貳''叁''肆''伍''陸''柒''捌''玖' }; 
  27.   
  28.         private char[] charNumeric = DefaultCharNumeric; 
  29.         private string[] rangeNumeric = DefaultRangeNumeric; 
  30.         private char zeroNumeric = DefaultCharNumeric[0]; 
  31.         private char[] unitNumeric = DefaultUnitNumeric; 
  32.         #endregion 
  33.   
  34.         #region Business Methods 
  35.         /// <summary> 
  36.         /// 重置數字替換的字符,必須從小到大是 10 個漢字字符。 
  37.         /// </summary> 
  38.         /// <param name="data">目標字符數組</param> 
  39.         /// <returns>成功替換則返回 <c>true</c> 。</returns> 
  40.         public bool ResetCharNumeric(char[] data) 
  41.         { 
  42.             if (data == null || data.Length != 10) 
  43.                 return false
  44.   
  45.             charNumeric = data; 
  46.             zeroNumeric = data[0]; 
  47.             return true
  48.         } 
  49.   
  50.         /// <summary> 
  51.         /// 重置位的分隔字符,必須從小到大是 4 個漢字字符。 
  52.         /// </summary> 
  53.         /// <param name="data">目標字符數組</param> 
  54.         /// <returns>成功替換則返回 <c>true</c> 。</returns> 
  55.         public bool ResetUnitNumeric(char[] data) 
  56.         { 
  57.             if (data == null || data.Length != 4) 
  58.                 return false
  59.   
  60.             unitNumeric = data; 
  61.             return true
  62.         } 
  63.   
  64.         /// <summary> 
  65.         /// 重置段的分隔字符。 
  66.         /// </summary> 
  67.         /// <param name="data">目標字符數組</param> 
  68.         public void ResetRangeNumeric(string[] data) 
  69.         { 
  70.             rangeNumeric = data ?? DefaultRangeNumeric; 
  71.         } 
  72.   
  73.         /// <summary> 
  74.         /// 執行數字轉大寫漢字字符的操作。 
  75.         /// </summary> 
  76.         /// <param name="obj">待轉換的數字</param> 
  77.         /// <returns>轉換完成的大寫漢字字符串。</returns> 
  78.         public string Convert(decimal obj) 
  79.         { 
  80.             if (obj > 9999999999999999.99M) 
  81.                 throw new ApplicationException("The numeric too big!"); 
  82.   
  83.             var data = obj.ToString("#.##"); 
  84.   
  85.             var list = data.Split('.'); 
  86.   
  87.             var result = MultiConvert(list[0]); 
  88.             if (list.Length > 1) 
  89.                 result += DecimalConvert(list[1]); 
  90.   
  91.             return result; 
  92.         } 
  93.         #endregion 
  94.   
  95.         #region Private Methods 
  96.         private string MultiConvert(string data) 
  97.         { 
  98.             var list = Split(data).ToArray(); 
  99.   
  100.             var results = new List<string>(); 
  101.             foreach (var item in list) 
  102.                 results.Add(SingleConvert(item)); 
  103.   
  104.             var sbResult = new StringBuilder(); 
  105.             var len = results.Count; 
  106.             var index = len - 1; 
  107.   
  108.             for (int i = 0; i < len; i++) 
  109.             { 
  110.                 var item = results[i]; 
  111.                 if ((i + 2 < len) && item == zeroNumeric.ToString() && results[i + 1].StartsWith(zeroNumeric.ToString())) 
  112.                     continue
  113.   
  114.                 if (!(i == (len - 1) && item == zeroNumeric.ToString())) 
  115.                     sbResult.Append(item); 
  116.   
  117.                 var unit = rangeNumeric[index - i]; 
  118.                 if (unit != string.Empty && item != zeroNumeric.ToString()) 
  119.                     sbResult.Append(unit); 
  120.             } 
  121.   
  122.             if (sbResult[sbResult.Length - 1] == zeroNumeric) 
  123.                 sbResult.Remove(sbResult.Length - 1, 1); 
  124.             sbResult.Append("元"); 
  125.   
  126.             return sbResult.ToString(); 
  127.         } 
  128.   
  129.         private string SingleConvert(string data) 
  130.         { 
  131.             var len = data.Length; 
  132.             var result = new List<char>(); 
  133.             var previousChar = char.MinValue; 
  134.             var unitIndex = len == 4 ? 0 : (4 - len); 
  135.   
  136.             for (int i = 0; i < len; i++) 
  137.             { 
  138.                 var item = CharToInt(data[i]); 
  139.                 var currentChineseChar = charNumeric[item]; 
  140.                 if (currentChineseChar == previousChar && previousChar == zeroNumeric && currentChineseChar == zeroNumeric) 
  141.                     continue
  142.                 else 
  143.                 { 
  144.                     result.Add(previousChar = currentChineseChar); 
  145.   
  146.                     var currentUnit = unitNumeric[unitIndex + i]; 
  147.                     if (currentChineseChar != zeroNumeric && currentUnit != char.MinValue) 
  148.                         result.Add(currentUnit); 
  149.                 } 
  150.             } 
  151.   
  152.             if (result.Count != 1 && result.Last() == zeroNumeric) 
  153.                 result.RemoveAt(result.Count - 1); 
  154.   
  155.             return new string(result.ToArray()); 
  156.         } 
  157.   
  158.         private string DecimalConvert(string data) 
  159.         { 
  160.             StringBuilder sbResult = new StringBuilder(); 
  161.             if (data[0] != '0'
  162.             { 
  163.                 sbResult.Append(charNumeric[CharToInt(data[0])]); 
  164.                 sbResult.Append("角"); 
  165.             } 
  166.             if (data[1] != '0'
  167.             { 
  168.                 sbResult.Append(charNumeric[CharToInt(data[1])]); 
  169.                 sbResult.Append("分"); 
  170.             } 
  171.             return sbResult.ToString(); 
  172.         } 
  173.   
  174.         private IEnumerable<string> Split(string data) 
  175.         { 
  176.             var len = data.Length / 4; 
  177.             var mod = data.Length % 4; 
  178.             if (mod != 0) 
  179.                 len += 1; 
  180.   
  181.             var startIndex = 0; 
  182.             var blockLength = mod != 0 ? mod : 4; 
  183.   
  184.             for (int i = 0; i < len; i++) 
  185.             { 
  186.                 yield return data.Substring(startIndex, blockLength); 
  187.                 startIndex += blockLength; 
  188.                 blockLength = 4; 
  189.             } 
  190.         } 
  191.   
  192.         private int CharToInt(char obj) 
  193.         { 
  194.             return ((int)obj) - 48; 
  195.         } 
  196.         #endregion 
  197.     } 
  198.   
 
如果你喜歡本文,請點一下推薦,謝謝!
責任編輯:彭凡 來源: 博客園
相關推薦

2021-07-17 23:02:15

數字人民幣支付寶微信

2021-07-31 10:38:53

數字人民幣數字貨幣區塊鏈

2021-10-14 09:06:37

數字人民幣數字貨幣區塊鏈

2021-08-09 15:08:15

數字人民幣比特幣貨幣

2022-02-07 14:18:06

數字人民幣冬奧會安全

2022-02-15 21:52:25

數字人民幣數字貨幣區塊鏈

2021-07-20 22:23:12

數字人民幣支付寶微信

2021-07-07 09:31:41

數字人民幣數字貨幣區塊鏈

2021-01-18 23:05:35

數字貨幣人民幣現金

2021-01-18 11:05:40

數字貨幣人民幣現金

2021-05-14 14:44:42

支付寶數字人民幣移動應用

2021-02-07 11:19:03

數字貨幣人民幣金融

2021-11-16 14:36:36

數字人民幣數字貨幣區塊鏈

2021-03-19 11:13:37

區塊鏈數字貨幣人民幣

2021-03-23 17:28:19

數字人民幣安全銀行

2011-11-18 09:35:18

App Store

2022-02-17 15:46:08

數字人民幣區塊鏈

2021-05-12 07:10:55

支付寶數字人民幣移動應用

2021-07-02 16:50:02

數字人民幣微信支付寶

2021-01-12 10:18:06

點贊
收藏

51CTO技術棧公眾號

中文字幕日本欧美| 欧美久久久久免费| 日韩动漫在线观看| 国产欧美久久久精品免费| 欧美国产日本| 亚洲女人天堂色在线7777| 日韩一级免费片| sm久久捆绑调教精品一区| 国产视频一区在线播放| 亚洲a在线观看| 日韩av大片在线观看| 久久中文字幕二区| 日韩av影片在线观看| 天天看片天天操| 免费毛片b在线观看| 国产精品传媒入口麻豆| 久久er99热精品一区二区三区| 中文字幕第31页| 一区二区三区福利| 美女视频黄免费的亚洲男人天堂| 老牛影视av老牛影视av| 在线观看欧美| 在线亚洲+欧美+日本专区| 成年在线观看视频| 国产在线视频网站| 91麻豆视频网站| 电影午夜精品一区二区三区| 中文区中文字幕免费看| 先锋影音久久| 97碰在线观看| 色在线观看视频| 久久五月天小说| 国产一区二区激情| 国产三级国产精品| 红杏aⅴ成人免费视频| 51精品视频一区二区三区| 91在线视频观看免费| 久草免费在线视频| 国产精品扒开腿做| 一区二区不卡在线观看| 国产成人手机在线| 麻豆极品一区二区三区| 热re99久久精品国产66热| 久久午夜无码鲁丝片午夜精品| 日本不卡电影| 亚洲人成五月天| xxxx黄色片| 超碰精品在线| 欧美成人vr18sexvr| 91丝袜超薄交口足| 四虎在线精品| 欧美日韩国产另类不卡| 欧美 日韩 国产 激情| 伊伊综合在线| 日本久久精品电影| 日本女优爱爱视频| 欧美特大特白屁股xxxx| 欧美日韩一区二区三区| 欧美成人三级在线视频| √天堂8资源中文在线| 亚洲综合图片区| www.好吊操| 暧暧视频在线免费观看| 亚洲大尺度视频在线观看| 一卡二卡三卡视频| 在线天堂资源| 在线观看91精品国产入口| 欧美在线观看视频网站| 日本少妇一区| 在线不卡中文字幕| 成年人性生活视频| 成人在线超碰| 亚洲欧美国产精品专区久久| 国产精品免费无码| 久久综合88| 欧美激情在线视频二区| 中文字幕日韩一级| 日韩成人午夜精品| 国产精品揄拍一区二区| jlzzjlzzjlzz亚洲人| 成人av一区二区三区| 欧美美乳视频网站在线观看| 999在线视频| 亚洲激情成人在线| 日韩欧美视频网站| 日韩精品第一| 日韩一区二区在线观看视频播放| 香蕉久久久久久av成人| 豆花视频一区二区| 亚洲天堂av在线免费| 欧美色视频一区二区三区在线观看| 中文在线日韩| 97人人爽人人喊人人模波多| 波多野结衣一区二区三区四区| 久久国产乱子精品免费女| 91日韩久久| 免费一级毛片在线观看| 中文字幕一区三区| 国产欧美日韩小视频| h1515四虎成人| 精品乱码亚洲一区二区不卡| 国产精品高清无码在线观看| 午夜激情久久| 青青久久av北条麻妃黑人| 国产又粗又猛又爽又黄的| thepron国产精品| 爱爱爱视频网站| 超级碰碰久久| 欧美一区二区视频在线观看2020| 黄色工厂在线观看| 久久精品免费一区二区三区| 欧洲成人免费视频| 精品乱子伦一区二区| 欧美激情综合在线| 日本人体一区二区| 精品一区二区三区免费看| 亚洲欧美制服中文字幕| 精品在线免费观看视频| 另类综合日韩欧美亚洲| 鲁丝片一区二区三区| 羞羞视频在线观看不卡| 欧美三级韩国三级日本三斤| 中文字幕 亚洲一区| 欧美福利影院| 成人春色激情网| 麻豆国产在线播放| 婷婷开心激情综合| 成人在线观看一区二区| 图片区亚洲欧美小说区| 国产精品免费久久久久影院| 四虎影院在线域名免费观看| 一区二区三区日本| 天天干天天曰天天操| 国产精品97| 国产精品自拍偷拍视频| 成人在线观看黄色| 色综合天天综合在线视频| 亚洲少妇18p| 极品少妇一区二区三区| 亚洲伊人第一页| 欧美日韩欧美| 欧美久久久久久蜜桃| 精品丰满少妇一区二区三区| 日韩av电影天堂| 欧美亚洲丝袜| 日本成人伦理电影| 亚洲视频精品在线| 欧美超碰在线观看| 国产午夜精品一区二区三区嫩草 | 亚洲欧美偷拍另类| 欧美极品在线观看| 国产精品91免费在线| 黄色网址在线播放| 欧美主播一区二区三区美女| av电影网站在线观看| 视频一区欧美日韩| 色一情一乱一伦一区二区三区 | 欧美四级电影网| www.黄色在线| 蜜桃精品视频在线观看| 亚洲午夜精品福利| 久久国产精品免费一区二区三区| 久久精品国产亚洲一区二区| 国产日产亚洲系列最新| 亚洲激情自拍视频| 99久久免费看精品国产一区| 国产视频一区欧美| 奇米888一区二区三区| 精品视频一区二区三区四区五区| www亚洲精品| 亚洲国产999| 欧美色视频日本版| 男人的天堂官网| 国产乱码一区二区三区| 日韩成人手机在线| 综合亚洲色图| 91精品国产综合久久久久久久久| 蜜芽在线免费观看| 亚洲成人免费在线视频| 国产免费av一区| 国产精品美女久久福利网站| 亚洲热在线视频| 亚洲人成人一区二区三区| 欧美日韩精品免费观看| 亚洲综合资源| 国语自产偷拍精品视频偷 | 91精品啪在线观看国产爱臀| 91av国产在线| 婷婷在线视频| 亚洲国产精品国自产拍av秋霞| 99精品在线播放| 亚洲图片欧美激情| 青青草成人免费视频| 久久精品国产在热久久| 国产美女网站在线观看| 久久亚洲精品中文字幕蜜潮电影| 国产精品v欧美精品∨日韩| 草莓视频成人appios| 欧美精品第一页在线播放| 免费资源在线观看| 亚洲精品一区二区三区四区高清| 亚洲 欧美 成人| 亚洲永久免费av| 国产日产在线观看| 91麻豆福利精品推荐| 天堂在线精品视频| 日韩精品亚洲专区| www.国产在线播放| 久久国产成人午夜av影院宅| 好看的日韩精品视频在线| 色999韩欧美国产综合俺来也| 97国产精品视频人人做人人爱| 尤物视频在线免费观看| 亚洲精品国产综合区久久久久久久| 亚洲特级黄色片| 色呦呦国产精品| 久久精品国产亚洲av无码娇色 | 91免费版看片| 欧美xxxx中国| 日韩精品一线二线三线| 亚欧日韩另类中文欧美| 国产福利不卡| 国产精品久久久久久久久久辛辛 | 国产三级视频在线播放线观看| 日韩丝袜情趣美女图片| 亚洲视频中文字幕在线观看| 日韩欧美在线视频观看| 日本一本高清视频| 一区二区三区日韩欧美精品| 日本成人精品视频| 欧美国产精品v| 久久久视频6r| 国产日韩综合av| 丰满少妇一区二区| 91年精品国产| 泷泽萝拉在线播放| 91麻豆精品一区二区三区| 老司机免费视频| 成人国产精品免费观看动漫| 国产成人av片| 国产不卡在线一区| 99国产精品免费视频| 国产精品综合久久| 日本人妻一区二区三区| 国产成人精品三级| 岛国大片在线免费观看| 国产不卡高清在线观看视频| 中文字幕久久久久久久| 成人午夜短视频| 国产精品手机在线观看| av激情综合网| 人妻体内射精一区二区| 91香蕉视频污在线| 国产毛片久久久久久久| 中文字幕精品—区二区四季| 1024在线看片| 成人欧美一区二区三区小说 | 欧美另类变人与禽xxxxx| 综合久久中文字幕| 91精品婷婷国产综合久久 | 亚洲色图第三页| av成人手机在线| 久久精品免费电影| 欧美人与性动交α欧美精品济南到| 久久99精品久久久久久噜噜| 国内在线视频| 欧美一级片在线播放| 欧美日韩免费看片| 91精品久久久久久久| 久久精品一级| 精品日韩美女| 欧美xxxx中国| 人人妻人人澡人人爽欧美一区双 | 成人av资源在线播放| 无码国模国产在线观看| 精品无人乱码一区二区三区的优势| 伊人成综合网伊人222| 亚洲精品自在在线观看| 女人天堂亚洲aⅴ在线观看| 777av视频| 免费观看久久久4p| 一级全黄裸体片| 国产欧美一区二区精品忘忧草| 亚洲区一区二区三| 天天综合网天天综合色| 黄色污污视频软件| 91麻豆精品国产91久久久久| 日本wwwxxxx| 色偷偷888欧美精品久久久| 欧美人与动牲性行为| 日韩av免费在线看| 国产乱码精品一区二区三区亚洲人| 国产一区福利视频| 久久精品国产www456c0m| 免费在线观看视频a| 久久av资源站| 9.1成人看片| 亚洲精品videosex极品| 成人小视频在线播放| 精品国产免费人成在线观看| 国产精品免费观看| 992tv成人免费影院| 日韩午夜电影免费看| 久久精品国产精品青草色艺| 偷拍欧美精品| 亚洲一级免费观看| 91视频一区二区| 一级黄色录像视频| 欧美性受xxxx| 神宫寺奈绪一区二区三区| 久久精品亚洲94久久精品| 都市激情亚洲综合| 国产在线欧美日韩| 综合国产精品| 国产视频手机在线播放| 91麻豆文化传媒在线观看| 久草视频中文在线| 91精品久久久久久蜜臀| 番号在线播放| 人人做人人澡人人爽欧美| 都市激情亚洲| www精品久久| 国产高清精品在线| 国产免费美女视频| 欧美三级韩国三级日本三斤| 欧美另类自拍| 51ⅴ精品国产91久久久久久| 99精品在免费线中文字幕网站一区| 在线观看欧美一区| 美国毛片一区二区| 免费观看a级片| 欧美在线制服丝袜| 国产中文在线| 国产精品久久久久久av| 中文有码一区| 国产精品久久久久9999小说| 91免费国产视频网站| 日本三级一区二区| 亚洲精品456在线播放狼人| 91桃色在线| 国产伦理一区二区三区| 国内揄拍国内精品久久| 亚洲 自拍 另类 欧美 丝袜| 亚洲免费av高清| 午夜精品一区二区三| 欧美精品激情blacked18| 999国产精品一区| 欧美国产日韩激情| 97久久精品人人澡人人爽| 国产一区二区三区影院| 日韩av影视综合网| 性欧美videohd高精| 日本一区视频在线观看| 日产国产欧美视频一区精品| 性猛交ⅹxxx富婆video| 欧美色倩网站大全免费| 日韩三级影院| 91免费看网站| 国产美女精品| 91成人精品一区二区| 欧美日韩精品欧美日韩精品一综合| 日本a在线播放| 成人毛片网站| 乱码第一页成人| 国产一二三四区在线| 91精品国产福利在线观看| 国产经典三级在线| 欧美国产一二三区| 美女久久久精品| 久草视频在线资源| 亚洲欧美视频在线| 精品亚洲a∨| 又大又硬又爽免费视频| 91麻豆.com| 国产又粗又猛又黄又爽| 久久久噜噜噜久久中文字免| 久久不卡国产精品一区二区| 邪恶网站在线观看| 洋洋成人永久网站入口| 久蕉依人在线视频| 亚洲一区二区三区久久| 一本色道久久综合亚洲精品不卡 | 香蕉成人啪国产精品视频综合网| 青青青草原在线| 91嫩草在线视频| 亚洲女优在线| 婷婷在线精品视频| 亚洲男人天堂手机在线| 羞羞视频在线观看一区二区| 国产不卡一区二区视频| 欧美国产丝袜视频| 可以免费看毛片的网站| 国产精品久久久91| 国产在线成人| 手机av在线不卡| 日韩av在线播放资源| 国产情侣一区在线| 国产精品无码一本二本三本色| 一区二区高清免费观看影视大全 | www.久久伊人|