人民幣金額大小寫轉換,三行代碼
//完善了一下查詢到的方法,支持小數,保留2位小數
- public string NumGetStr(double Num)
- {
- string[] DX_SZ = { "零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖", "拾" };//大寫數字
- string[] DX_DW = { "元", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟", "萬" };
- string[] DX_XSDS = { "角", "分" };//大些小數單位
- if (Num == 0) return DX_SZ[0];
- Boolean IsXS_bool = false;//是否小數
- string NumStr;//整個數字字符串
- string NumStr_Zs;//整數部分
- string NumSr_Xs = "";//小數部分
- string NumStr_R = "";//返回的字符串
- NumStr = Num.ToString();
- NumStr_Zs = NumStr;
- if (NumStr_Zs.Contains("."))
- {
- NumStr = Math.Round(Num, 2).ToString();
- NumStr_Zs = NumStr.Substring(0, NumStr.IndexOf("."));
- NumSr_Xs = NumStr.Substring((NumStr.IndexOf(".") + 1), (NumStr.Length - NumStr.IndexOf(".") - 1));
- IsXS_bool = true;
- }
- int k = 0;
- Boolean IsZeor = false;//整數中間連續0的情況
- for (int i = 0; i < NumStr_Zs.Length; i++) //整數
- {
- int j = int.Parse(NumStr_Zs.Substring(i, 1));
- if (j != 0)
- {
- NumStr_R += DX_SZ[j] + DX_DW[NumStr_Zs.Length - i - 1];
- IsZeor = false; //沒有連續0
- }
- else if (j == 0)
- {
- k++;
- if (!IsZeor && !(NumStr_Zs.Length == i + 1)) //等於0不是最后一位,連續0取一次
- {
- //有問題
- if (NumStr_Zs.Length - i - 1 >= 4 && NumStr_Zs.Length - i - 1<=6)
- NumStr_R += DX_DW[4] + "零";
- else
- if (NumStr_Zs.Length - i - 1 > 7)
- NumStr_R += DX_DW[8] + "零";
- else
- NumStr_R += "零";
- IsZeor = true;
- }
- if (NumStr_Zs.Length == i + 1)// 等於0且是最后一位 變成 XX元整
- NumStr_R += DX_DW[NumStr_Zs.Length - i - 1];
- }
- }
- if (NumStr_Zs.Length>2 && k == NumStr_Zs.Length - 1)
- NumStr_R = NumStr_R.Remove(NumStr_R.IndexOf('零'), 1); //比如1000,10000元整的情況下 去0
- if (!IsXS_bool) return NumStr_R + "整"; //如果沒有小數就返回
- else
- {
- for (int i = 0; i < NumSr_Xs.Length; i++)
- {
- int j = int.Parse(NumSr_Xs.Substring(i, 1));
- NumStr_R += DX_SZ[j] + DX_XSDS[NumSr_Xs.Length - i - 1];
- }
- }
- return NumStr_R;
- }
2016.6.16更新。
發現這么一段代碼,我整個人都。。
- public static String ConvertToChinese(Decimal number)
- {
- 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");
- 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}");
- var r = Regex.Replace(d, ".", m => "負元空零壹貳叄肆伍陸柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString());
- return r;
- }
上面那么一大段的這幾句也可以實現 呵呵.. Interesting
正則真強大。