C#人民幣金額大寫轉換


人民幣金額大小寫轉換,三行代碼

//完善了一下查詢到的方法,支持小數,保留2位小數

[csharp]  view plain  copy
 
  1. public string NumGetStr(double Num)  
  2.       {  
  3.           string[] DX_SZ = { "零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖", "拾" };//大寫數字  
  4.           string[] DX_DW = { "元", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟", "萬" };  
  5.           string[] DX_XSDS = { "角", "分" };//大些小數單位  
  6.           if (Num == 0) return DX_SZ[0];  
  7.   
  8.           Boolean IsXS_bool = false;//是否小數  
  9.   
  10.           string NumStr;//整個數字字符串  
  11.           string NumStr_Zs;//整數部分  
  12.           string NumSr_Xs = "";//小數部分  
  13.           string NumStr_R = "";//返回的字符串  
  14.   
  15.   
  16.           NumStr = Num.ToString();  
  17.           NumStr_Zs = NumStr;  
  18.           if (NumStr_Zs.Contains("."))  
  19.           {  
  20.               NumStr = Math.Round(Num, 2).ToString();  
  21.               NumStr_Zs = NumStr.Substring(0, NumStr.IndexOf("."));  
  22.               NumSr_Xs = NumStr.Substring((NumStr.IndexOf(".") + 1), (NumStr.Length - NumStr.IndexOf(".") - 1));  
  23.               IsXS_bool = true;  
  24.           }  
  25.   
  26.           int k = 0;  
  27.           Boolean IsZeor = false;//整數中間連續0的情況  
  28.           for (int i = 0; i < NumStr_Zs.Length; i++) //整數  
  29.           {  
  30.               int j = int.Parse(NumStr_Zs.Substring(i, 1));  
  31.               if (j != 0)  
  32.               {  
  33.                   NumStr_R += DX_SZ[j] + DX_DW[NumStr_Zs.Length - i - 1];  
  34.                   IsZeor = false; //沒有連續0  
  35.               }  
  36.               else if (j == 0)  
  37.               {  
  38.                   k++;  
  39.                   if (!IsZeor && !(NumStr_Zs.Length == i + 1)) //等於0不是最后一位,連續0取一次  
  40.                   {  
  41.                       //有問題  
  42.                       if (NumStr_Zs.Length - i - 1 >= 4 && NumStr_Zs.Length - i - 1<=6)  
  43.                           NumStr_R += DX_DW[4] + "零";  
  44.                       else  
  45.                           if (NumStr_Zs.Length - i - 1 > 7)  
  46.                               NumStr_R += DX_DW[8] + "零";  
  47.                       else  
  48.                           NumStr_R += "零";  
  49.   
  50.                       IsZeor = true;  
  51.                   }  
  52.   
  53.                   if (NumStr_Zs.Length == i + 1)//  等於0且是最后一位 變成 XX元整  
  54.                       NumStr_R += DX_DW[NumStr_Zs.Length - i - 1];  
  55.               }  
  56.   
  57.           }  
  58.           if (NumStr_Zs.Length>2 && k == NumStr_Zs.Length - 1)   
  59.               NumStr_R = NumStr_R.Remove(NumStr_R.IndexOf('零'), 1); //比如1000,10000元整的情況下 去0  
  60.   
  61.           if (!IsXS_bool) return NumStr_R + "整"; //如果沒有小數就返回  
  62.           else  
  63.           {  
  64.               for (int i = 0; i < NumSr_Xs.Length; i++)  
  65.               {  
  66.                   int j = int.Parse(NumSr_Xs.Substring(i, 1));  
  67.                   NumStr_R += DX_SZ[j] + DX_XSDS[NumSr_Xs.Length - i - 1];  
  68.               }  
  69.           }  
  70.   
  71.           return NumStr_R;  
  72.       }  

 

 

 

2016.6.16更新。

發現這么一段代碼,我整個人都。。 

 

[csharp]  view plain  copy
 
  1. public static String ConvertToChinese(Decimal number)  
  2.        {  
  3.            var s = number.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");  
  4.            var d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");  
  5.            var r = Regex.Replace(d, ".", m => "負元空零壹貳叄肆伍陸柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString());  
  6.            return r;  
  7.        }  

上面那么一大段的這幾句也可以實現 呵呵.. Interesting

正則真強大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM