C# 数值转换中文大写
来源:互联网 发布:淘宝网阳台鞋柜 编辑:程序博客网 时间:2024/06/05 13:24
发票支票都要用到数值转换为中文大写,这里提供一个代码解决方案,此方法到兆为止,之前那个如果到亿以后当中很多个零的话就错了(亿以前是对的),现在改了,不过在纠结到底是“陆亿伍仟零叁拾贰圆整”还是“陆亿伍仟万零叁拾贰圆整”现在是前一钟
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# 数值转换中文大写
- 中文大写转换数值
- 将数值转换为中文大写
- 货币数值转换为大写中文
- 数值转换为中文大写-------金额
- C#阿拉伯数字转换为中文大写
- 将阿拉伯数字表示的货币数值转换成以中文大写表示的货币数值
- 转换大写中文数字
- 数字转换大写中文
- 中文大写金额转换
- 使用C#实现阿拉伯数字到大写中文的转换
- 使用C#实现阿拉伯数字到大写中文的转换
- C#中把货币、日期转换成中文大写
- C# 实现将阿拉伯数字转换成中文大写金额
- C#阿拉伯数字金额转换为中文大写金额
- 关于C#实现阿拉伯数字转换成中文大写
- C#中把货币、日期转换成中文大写
- C#中把日期转换成中文大写
- Blob 和 Clob
- MySQL中 查出一个数据库的所有表名 及 Java 实现
- Holding high the flag of Reform & Opening-up
- Blob he Clob (二)
- 设计模式一些原则
- C# 数值转换中文大写
- [双语阅读]男女快乐感有别 男爱钱女重情
- 修改VMware虚拟机网卡MAC地址的方法总结
- sql 2005 学习 1
- 增强JavaScript中的日期构造函数
- 一个c#打印程序
- firefox和ie的事件监听
- IEnumerable和IEnumerator有什么区别 (摘自BaiDu知道)
- 也来谈谈SQL SERVER 自定义函数~