C#中把货币、日期转换成中文大写

mac2022-07-02  9

View Code 1 public class UpperConvert 2 { 3 public UpperConvert() 4 { 5 // 6 // TODO: 在此处添加构造函数逻辑 7 // 8 } 9 // 把数字转换为大写 10 public string numtoUpper( int num) 11 { 12 String str = num.ToString(); 13 string rstr = "" ; 14 int n; 15 for ( int i = 0 ; i < str.Length; i ++ ) 16 { 17 n = Convert.ToInt16(str[i].ToString()); // char转数字,转换为字符串,再转数字 18 switch (n) 19 { 20 case 0 :rstr = rstr + " " ; break ; 21 case 1 :rstr = rstr + " " ; break ; 22 case 2 :rstr = rstr + " " ; break ; 23 case 3 :rstr = rstr + " " ; break ; 24 case 4 :rstr = rstr + " " ; break ; 25 case 5 :rstr = rstr + " " ; break ; 26 case 6 :rstr = rstr + " " ; break ; 27 case 7 :rstr = rstr + " " ; break ; 28 case 8 :rstr = rstr + " " ; break ; 29 default :rstr = rstr + " " ; break ; 30 31 32 } 33 34 } 35 return rstr; 36 } 37 // 月转化为大写 38 public string monthtoUpper( int month) 39 { 40 if (month < 10 ) 41 { 42 return numtoUpper(month); 43 } 44 else 45 if (month == 10 ) { return " " ; } 46 47 else 48 { 49 return " " + numtoUpper(month - 10 ); 50 } 51 } 52 // 日转化为大写 53 public string daytoUpper( int day) 54 { 55 if (day < 20 ) 56 { 57 return monthtoUpper(day); 58 } 59 else 60 { 61 String str = day.ToString(); 62 if (str[ 1 ] == ' 0 ' ) 63 { 64 return numtoUpper(Convert.ToInt16(str[ 0 ].ToString())) + " " ; 65 66 } 67 68 69 else 70 { 71 return numtoUpper(Convert.ToInt16(str[ 0 ].ToString())) + " " 72 + numtoUpper(Convert.ToInt16(str[ 1 ].ToString())); 73 } 74 } 75 } 76 // 日期转换为大写 77 public string dateToUpper(System.DateTime date) 78 { 79 int year = date.Year; 80 int month = date.Month; 81 int day = date.Day; 82 return numtoUpper(year) + " " + monthtoUpper(month) + " " + daytoUpper(day) + " " ; 83 84 } 85 } 86 货币转换代码: 87 /**/ /// <summary> 88 /// MoneyConvert 的摘要说明 89 /// </summary> 90 public class MoneyConvert 91 { 92 public MoneyConvert() 93 { 94 // 95 // TODO: 在此处添加构造函数逻辑 96 // 97 } 98 public string GetUpper( string numstr) 99 { 100 try 101 { 102 decimal num = Convert.ToDecimal(numstr); 103 return GetUpper(num); 104 } 105 catch 106 { 107 return " 非数字形式! " ; 108 } 109 } 110 public string GetUpper( int numint) 111 { 112 try 113 { 114 decimal num = Convert.ToDecimal(numint); 115 return GetUpper(num); 116 } 117 catch 118 { 119 return " 非数字形式! " ; 120 } 121 } 122 /**//**/ 123 /**/ /// <summary> 124 /// 转换人民币大小金额 125 /// </summary> 126 /// <param name="num"> 金额 </param> 127 /// <returns> 返回大写形式 </returns> 128 public string GetUpper( decimal num) 129 { 130 string strUpperMum = " 零壹贰叁肆伍陆柒捌玖 " ; // 0-9所对应的汉字 131 string strNumUnit = " 万仟佰拾亿仟佰拾万仟佰拾元角分 " ; // 数字位所对应的汉字 132 string strOfNum = "" ; // 从原num值中取出的值 133 string strNum = "" ; // 数字的字符串形式 134 string strReturnUpper = "" ; // 人民币大写金额形式 135 int i; // 循环变量 136 int sumLength; // num的值乘以100的字符串长度 137 string ch1 = "" ; // 数字的汉语读法 138 string ch2 = "" ; // 数字位的汉字读法 139 int nzero = 0 ; // 用来计算连续的零值是几个 140 int temp; // 从原num值中取出的值 141 142 num = Math.Round(Math.Abs(num), 2 ); // 将num取绝对值并四舍五入取2位小数 143 strNum = (( long )(num * 100 )).ToString(); // 将num乘100并转换成字符串形式 144 sumLength = strNum.Length; // 找出最高位 145 if (sumLength > 15 ) { return " 溢出 " ; } 146 strNumUnit = strNumUnit.Substring( 15 - sumLength); // 取出对应位数的strNumUnit的值。如:200.55,sumLength为5所以strNumUnit=佰拾元角分 147 148 // 循环取出每一位需要转换的值 149 for (i = 0 ; i < sumLength; i ++ ) 150 { 151 strOfNum = strNum.Substring(i, 1 ); // 取出需转换的某一位的值 152 temp = Convert.ToInt32(strOfNum); // 转换为数字 153 if (i != (sumLength - 3 ) && i != (sumLength - 7 ) && i != (sumLength - 11 ) && i != (sumLength - 15 )) 154 { 155 // 当所取位数不为元、万、亿、万亿上的数字时 156 if (strOfNum == " 0 " ) 157 { 158 ch1 = "" ; 159 ch2 = "" ; 160 nzero = nzero + 1 ; 161 } 162 else 163 { 164 if (strOfNum != " 0 " && nzero != 0 ) 165 { 166 ch1 = " " + strUpperMum.Substring(temp * 1 , 1 ); 167 ch2 = strNumUnit.Substring(i, 1 ); 168 nzero = 0 ; 169 } 170 else 171 { 172 ch1 = strUpperMum.Substring(temp * 1 , 1 ); 173 ch2 = strNumUnit.Substring(i, 1 ); 174 nzero = 0 ; 175 } 176 } 177 } 178 else 179 { 180 // 该位是万亿,亿,万,元位等关键位 181 if (strOfNum != " 0 " && nzero != 0 ) 182 { 183 ch1 = " " + strUpperMum.Substring(temp * 1 , 1 ); 184 ch2 = strNumUnit.Substring(i, 1 ); 185 nzero = 0 ; 186 } 187 else 188 { 189 if (strOfNum != " 0 " && nzero == 0 ) 190 { 191 ch1 = strUpperMum.Substring(temp * 1 , 1 ); 192 ch2 = strNumUnit.Substring(i, 1 ); 193 nzero = 0 ; 194 } 195 else 196 { 197 if (strOfNum == " 0 " && nzero >= 3 ) 198 { 199 ch1 = "" ; 200 ch2 = "" ; 201 nzero = nzero + 1 ; 202 } 203 else 204 { 205 if (sumLength >= 11 ) 206 { 207 ch1 = "" ; 208 nzero = nzero + 1 ; 209 } 210 else 211 { 212 ch1 = "" ; 213 ch2 = strNumUnit.Substring(i, 1 ); 214 nzero = nzero + 1 ; 215 } 216 } 217 } 218 } 219 } 220 if (i == (sumLength - 11 ) || i == (sumLength - 3 )) 221 { 222 // 如果该位是亿位或元位,则必须写上 223 ch2 = strNumUnit.Substring(i, 1 ); 224 } 225 strReturnUpper = strReturnUpper + ch1 + ch2; 226 227 if (i == sumLength - 1 && strOfNum == " 0 " ) 228 { 229 // 最后一位(分)为0时,加上“整” 230 strReturnUpper = strReturnUpper + ' ' ; 231 } 232 } 233 if (num == 0 ) 234 { 235 strReturnUpper = " 零元整 " ; 236 } 237 return strReturnUpper; 238 } 239 }

转载于:https://www.cnblogs.com/right_forever/archive/2011/06/02/2068548.html

相关资源:C#把数字转换成大写金额的代码实例
最新回复(0)