货币转换常用方法
1 /// <summary> 2 /// 通过数字求金额的大写 3 /// decimal p=123758.21m; 4 /// Response.Write (new CommonFunction().ToUpper(p)); 5 /// </summary> 6 /// <param name= "d "> </param> 7 /// <returns> </returns> 8 public static string ToUpper(decimal d) 9 { 10 if (d == 0) 11 return "零元整"; 12 string je = d.ToString("####.00"); 13 if (je.Length > 15) 14 return ""; 15 je = new String('0', 15 - je.Length) + je; //若小于15位长,前面补0 16 string stry = je.Substring(0, 4); //取得 '亿 '单元 17 string strw = je.Substring(4, 4); //取得 '万 '单元 18 string strg = je.Substring(8, 4); //取得 '元 '单元 19 string strf = je.Substring(13, 2); //取得小数部分 20 string str1 = "", str2 = "", str3 = ""; 21 str1 = getupper(stry, "亿"); //亿单元的大写 22 str2 = getupper(strw, "万"); //万单元的大写 23 str3 = getupper(strg, "元"); //元单元的大写 24 string str_y = "", str_w = ""; 25 if (je[3].ToString() == "0" || je[4].ToString() == "0") //亿和万之间是否有0 26 str_y = "零"; 27 if (je[7].ToString() == "0" || je[8].ToString() == "0") //万和元之间是否有0 28 str_w = "零"; 29 string ret = str1 + str_y + str2 + str_w + str3; //亿,万,元的三个大写合并 30 for (int i = 0; i < ret.Length; i++) //去掉前面的 "零 " 31 { 32 if (ret[i].ToString() != "零") 33 { 34 ret = ret.Substring(i); 35 break; 36 } 37 } 38 for (int i = ret.Length - 1; i > -1; i--) //去掉最后的 "零 " 39 { 40 if (ret[i].ToString() != "零") 41 { 42 ret = ret.Substring(0, i + 1); 43 break; 44 } 45 } 46 if (ret[ret.Length - 1].ToString() != "元") //若最后不位不是 '元 ',则加一个 '元 '字 47 ret = ret + "元"; 48 if (ret == "零零元 ") //若为零元,则去掉 "元数 ",结果只要小数部分 49 ret = ""; 50 if (strf == "00") //下面是小数部分的转换 51 { 52 ret = ret + "整"; 53 } 54 else 55 { 56 string tmp = ""; 57 tmp = getint(strf[0].ToString()); 58 if (tmp == "零") 59 ret = ret + tmp; 60 else 61 ret = ret + tmp + "角"; 62 tmp = getint(strf[1].ToString()); 63 if (tmp == "零") 64 ret = ret + "整"; 65 else 66 ret = ret + tmp + "分"; 67 } 68 if (ret[0].ToString() == "零") 69 { 70 ret = ret.Substring(1); //防止0.03转为 "零叁分 ",而直接转为 "叁分 " 71 } 72 return ret; //完成,返回 73 } 74 /// <summary> 75 /// 把一个单元转为大写,如亿单元,万单元,个单元 76 /// </summary> 77 /// <param name= "str "> 这个单元的小写数字(4位长,若不足,则前面补零) </param> 78 /// <param name= "strDW "> 亿,万,元 </param> 79 /// <returns> 转换结果 </returns> 80 private static string getupper(string str, string strDW) 81 { 82 if (str == "0000") 83 return ""; 84 string ret = ""; 85 string tmp1 = getint(str[0].ToString()); 86 string tmp2 = getint(str[1].ToString()); 87 string tmp3 = getint(str[2].ToString()); 88 string tmp4 = getint(str[3].ToString()); 89 if (tmp1 != "零") 90 { 91 ret = ret + tmp1 + "仟"; 92 } 93 else 94 { 95 ret = ret + tmp1; 96 } 97 if (tmp2 != "零") 98 { 99 ret = ret + tmp2 + "佰"; 100 } 101 else 102 { 103 if (tmp1 != "零") //保证若有两个零 '00 ',结果只有一个零,下同 104 ret = ret + tmp2; 105 } 106 if (tmp3 != "零") 107 { 108 ret = ret + tmp3 + "拾"; 109 } 110 else 111 { 112 if (tmp2 != "零") 113 ret = ret + tmp3; 114 } 115 if (tmp4 != "零") 116 { 117 ret = ret + tmp4; 118 } 119 if (ret[0].ToString() == "零") //若第一个字符是 '零 ',则去掉 120 ret = ret.Substring(1); 121 if (ret[ret.Length - 1].ToString() == "零") //若最后一个字符是 '零 ',则去掉 122 ret = ret.Substring(0, ret.Length - 1); 123 return ret + strDW; //加上本单元的单位 124 } 125 126 /// <summary> 127 /// 单个数字转为大写 128 /// </summary> 129 /// <param name= "c "> 小写阿拉伯数字 0---9 </param> 130 /// <returns> 大写数字 </returns> 131 private static string getint(string c) 132 { 133 string strMoney = ""; 134 switch (c) 135 { 136 case "0": 137 strMoney = "零"; 138 break; 139 case "1": 140 strMoney = "壹"; 141 break; 142 case "2": 143 strMoney = "贰"; 144 break; 145 case "3": 146 strMoney = "叁"; 147 break; 148 case "4": 149 strMoney = "肆"; 150 break; 151 case "5": 152 strMoney = "伍"; 153 break; 154 case "6": 155 strMoney = "陆"; 156 break; 157 case "7": 158 strMoney = "柒"; 159 break; 160 case "8": 161 strMoney = "捌"; 162 break; 163 case "9": 164 strMoney = "玖"; 165 break; 166 } 167 return strMoney; 168 }