C# 数值转换中文大写
2008-12-11 11:04
316 查看
发票支票都要用到数值转换为中文大写,这里提供一个代码解决方案,此方法到兆为止,之前那个如果到亿以后当中很多个零的话就错了(亿以前是对的),现在改了,不过在纠结到底是“陆亿伍仟零叁拾贰圆整”还是“陆亿伍仟万零叁拾贰圆整”现在是前一钟
public readonly string[] RMBUNIT = { "圆", "角", "分", "整" }; public readonly string[] CHINANUM = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; //个位因为没有单位所以是空字符 public readonly string[] CHINABIT = { string.Empty, "拾", "佰", "仟", "万", "亿", "兆" }; // 主方法将钱的数额传入返回大写中文 public string ToMoneyCNString(decimal money) { string[] unit = RMBUNIT; string[] moneySplit = money.ToString().Split('.'); string intValue = string.Empty, minValue = string.Empty; //转换小数点前“元”部分 if (moneySplit.Length > 0) intValue = ToNumCNString(moneySplit[0].ToCharArray()); if (intValue.Length > 0) intValue += unit[0]; //转换小数点后“角”和“分”部分 if (moneySplit.Length > 1) for (int i = 0; i < moneySplit[1].Length; i++) minValue += CHINANUM[Convert.ToInt16(moneySplit[1][i].ToString())] + unit[i + 1]; return intValue + minValue + unit[3]; } /// 将数字转换为中文大写数字 public string ToNumCNString(long num) { return ToNumCNString(num.ToString().ToCharArray()); } public string ToNumCNString(char[] num) { int index = 0; string strBig = string.Empty; do { strBig += ToNumCNString(num, ref index); } while (num.Length > 1 && index < num.Length - 1); return strBig; } public string ToNumCNString(char[] num, ref int index) { char[] numChr = num; string strBig = string.Empty; string toChrZero = CHINANUM[0]; string bit = CHINABIT[firstCNStringIndex(minLen(numChr.Length - index))]; List<int> maxBit = readMaxBit(num); bool blBit = false; for (int i = index; i < numChr.Length; i++) { //如果当前数字是0,就要判断0是不是在最靠近他的单位位置 string cnBit = firstCNString(numChr.Length - i); int bitIndex = firstCNStringIndex(minLen(numChr.Length - index)); index = i; if (bit != CHINABIT[bitIndex]) return strBig; //判断如果是0同时又\是本位最大位或者等于万位要加单位(因为都是万位向上进) if ('0' == numChr[i] && !string.IsNullOrEmpty(strBig) && (cnBit == bit || isBit(maxBit, cnBit))) { blBit = true; strBig += cnBit; } else if ('0' != numChr[i]) { strBig += CHINANUM[Convert.ToInt16(numChr[i].ToString())] + cnBit; } if ('0' == numChr[i] && !strBig.EndsWith(toChrZero)) if (cnBit == bit && !string.IsNullOrEmpty(strBig) || string.IsNullOrEmpty(cnBit) || i + 1 < numChr.Length && '0' != numChr[i + 1]) if (!blBit) strBig += toChrZero; blBit = false; } strBig = removeLastZero(strBig); return strBig; } private bool isBit(List<int> list, string bit) { foreach (int node in list) if (bit == CHINABIT[node]) return true; return false; } private List<int> readMaxBit(char[] num) { List<int> list = new List<int>(); for (int i = 0; i < num.Length; i++) { int max = firstCNStringIndex(minLen(num.Length - i)); max = max > 4 ? max - 1 : 4; list.Add(max); } return list; } private string removeLastZero(string strBig) { if (strBig.EndsWith(CHINANUM[0])) strBig = strBig.Remove(strBig.Length - 1); return strBig; } private int firstCNStringIndex(int index) { switch (index) { case 1: return 0; case 2: return 1; case 3: return 2; case 4: return 3; case 5: return 4; case 9: return 5; case 17: return 6; } return -1; } private int firstCNStringLen(int len) { int index = firstCNStringIndex(len); if (index < 0) index = firstCNStringLen(len - minLen(len) + 1); return index; } /// 查找单位是什么(佰,仟 等)传入的参数就是需要转换数字的位数长度(如100就是3) private string firstCNString(int len) { if (0 == len) return string.Empty; int index = firstCNStringLen(len); return CHINABIT[index]; } /// 查找最靠近的单位的长度 private int minLen(int len) { int fontValue = 5; int returnValue = 5; while (true) { returnValue += (returnValue - 1); if (returnValue > len) return fontValue; fontValue = returnValue; } }
相关文章推荐
- 数值转换为中文大写-------金额
- 一个将阿拉伯数字转换成中文大写的好算法(C#)
- .Net/C#/VB/T-SQL/Java/Script 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)
- C# 数字转换成汉字大写 数值转换成汉字大写
- C# 人民币大小写转换,将阿拉伯数字转换为中文的大写人民币
- C# 货币金额中文(英文)大写转换方法-工具类
- 使用C#实现阿拉伯数字到大写中文的转换
- 转 .Net/C#/VB/T-SQL/Java/Script 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)
- C#写的将阿拉伯数字转换成中文大写金额代码
- 中文大写转换数值
- C#实现的【阿拉伯数字转换成中文大写金额】代码(原创)
- c#金额转换成中文大写金额
- c#金额转换成中文大写金额 .Net开发Windows服务
- C# 将小写数字转换为 一般中文大写数字 和 人民币大写数字
- C#实现阿拉伯数字(小写金额)到大写中文(大写金额)的转换
- C# 日期转换为中文大写
- C# 将阿拉伯数字转换成中文大写(转载)
- 使用C#实现阿拉伯数字到大写中文的转换-第二种方法
- .Net/C#/VB/T-SQL/Java 实现: 将天文数字转换成中文大写 (2000 年前的思路,打劫的,一点儿技术含量都没有)
- C#中把日期转换成中文大写