真正正确的人民币 小写 大写 转换算法
2010-07-13 22:30
302 查看
网上很多人民币数字转换成人民币大写的算法,但是,按照财务的规则,没有一个是对的。
于是我按照财务的规则重新写了一次这个逻辑
首先来看财务的大写人民币规则
C#代码有点区别,但是经过测试是没有问题的
(代码中包含了 小写转换,例如 1709.5 会转换成¥1709.50 )
于是我按照财务的规则重新写了一次这个逻辑
首先来看财务的大写人民币规则
(一) 阿拉伯数字中间有“0”时,中文大写金额中间可以只写一个“零”字。如¥1,409.50,应写成人民币壹仟肆佰零玖元伍角。 (二) 阿拉伯数字中间连续有几个“0”,中文大写金额中间可以只写一个“零”字,如¥6,007.14,应写成人民币陆仟零柒元壹角肆分。 (三) 阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”,万位、元位也是“0”,但仟位、角位不是“0”时,中文大写金额中可以只写一个零字,也可以不写“零”字,如¥1,680.32,应写成人民币壹仟陆佰捌拾元零三角贰分,或者写成人民币壹仟陆佰捌拾元三角贰分;又如¥107,000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万柒仟元伍角叁分。 (四) 阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后面应写“零”字。如¥16,409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾元零肆分。
C#代码有点区别,但是经过测试是没有问题的
(代码中包含了 小写转换,例如 1709.5 会转换成¥1709.50 )
private string TryConverRMBCharToChar(string p) { string RMBStr = ""; double money; if (double.TryParse(p, out money)) { double temp= money*100; string cent = (temp % 10).ToString(); temp/= 10; string _10cent = temp>=1?((int)(temp % 10)).ToString():(cent == "¥"||cent == string.Empty?string.Empty:"¥"); temp/=10; string yuan = temp >= 1 ? ((int)(temp % 10)).ToString() : (_10cent == "¥" || _10cent == string.Empty ? string.Empty : "¥"); temp /= 10; string _10 = temp >= 1 ? ((int)(temp % 10)).ToString() : (yuan == "¥" || yuan == string.Empty ? string.Empty : "¥"); temp /= 10; string _100 = temp >= 1 ? ((int)(temp % 10)).ToString() : (_10 == "¥" || _10 == string.Empty ? string.Empty : "¥"); temp /= 10; string _K = temp >= 1 ? ((int)(temp % 10)).ToString() : (_100 == "¥" || _100 == string.Empty ? string.Empty : "¥"); temp /= 10; string _10K = temp >= 1 ? ((int)(temp % 10)).ToString() : (_K == "¥" || _K == string.Empty ? string.Empty : "¥"); temp /= 10; string _100K = temp >= 1 ? ((int)(temp % 10)).ToString() : (_10K == "¥" || _10K == string.Empty ? string.Empty : "¥"); temp /= 10; string _M = temp >= 1 ? ((int)(temp % 10)).ToString() : (_100K == "¥" || _100K == string.Empty ? string.Empty : "¥"); temp /= 10; string _10M = temp >= 1 ? ((int)(temp % 10)).ToString() : (_M == "¥" || _M == string.Empty ? string.Empty : "¥"); temp /= 10; string _100M = temp >= 1 ? ((int)(temp % 10)).ToString() : (_10M == "¥" || _10M == string.Empty ? string.Empty : "¥"); label100M.Text = label100MCopy.Text = _100M.ToString(); label10M.Text = label10MCopy.Text = _10M.ToString(); labelM.Text = labelMCopy.Text = _M.ToString(); label100K.Text = label100KCopy.Text = _100K.ToString(); label10K.Text = label10KCopy.Text = _10K.ToString(); labelK.Text = labelKCopy.Text = _K.ToString(); label100.Text = label100Copy.Text = _100.ToString(); label10.Text = label10Copy.Text = _10.ToString(); labelYuan.Text = labelYuanCopy.Text = yuan.ToString(); label10Cent.Text = label10CentCopy.Text = _10cent.ToString(); labelCent.Text = labelCentCopy.Text = cent.ToString(); if (!string.IsNullOrEmpty(_100M) && _100M != "¥") { if (_100M == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_100M) + "亿"; } } if (!string.IsNullOrEmpty(_10M) && _10M != "¥") { if (_10M == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_10M) + "仟"; } } if (!string.IsNullOrEmpty(_M) && _M != "¥") { if (_M == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_M) + "佰"; } } if (!string.IsNullOrEmpty(_100K) && _100K != "¥") { if (_100K == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_100K) + "拾"; } } if (!string.IsNullOrEmpty(_10K) && _10K != "¥") { if (_10K == "0") { RMBStr += "万零"; } else { RMBStr += ConverRMBNOToStr(_10K) + "万"; } } if (!string.IsNullOrEmpty(_K) && _K != "¥") { if (_K == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_K) + "仟"; } } if (!string.IsNullOrEmpty(_100) && _100 != "¥") { if (_100 == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_100) + "佰"; } } if (!string.IsNullOrEmpty(_10) && _10 != "¥") { if (_10 == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_10) + "拾"; } } if (!string.IsNullOrEmpty(yuan) && yuan != "¥") { if (yuan == "0") { RMBStr += "元零"; } else { RMBStr += ConverRMBNOToStr(yuan) + "元"; } } if (!string.IsNullOrEmpty(_10cent) && _10cent != "¥") { if(_10cent == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(_10cent) + "角"; } } if (!string.IsNullOrEmpty(cent) && cent != "¥") { if (cent == "0") { RMBStr += "零"; } else { RMBStr += ConverRMBNOToStr(cent) + "分"; } } if (string.IsNullOrEmpty(cent) || cent == "0") { RMBStr += "整"; } RMBStr = RemoveZero(RMBStr); RMBStr = RemoveLastZero(RMBStr); } return RMBStr; } private string RemoveLastZero(string RMBStr) { if (RMBStr.Substring(RMBStr.Length - 1) == "零") { return RMBStr.Remove(RMBStr.Length - 1); } else return RMBStr; } private string RemoveZero(string RMBStr) { if (RMBStr.IndexOf("零零") > 0) { RMBStr = RMBStr.Replace("零零", "零"); return RemoveZero(RMBStr); } else if (RMBStr.IndexOf("零万零") > 0) { RMBStr = RMBStr.Replace("零万零", "万零"); return RemoveZero(RMBStr); } else if (RMBStr.IndexOf("零元零") > 0) { RMBStr = RMBStr.Replace("零元零", "元零"); return RemoveZero(RMBStr); } else if (RMBStr.IndexOf("零整") > 0) { RMBStr = RMBStr.Replace("零整", "整"); return RemoveZero(RMBStr); } else { return RMBStr; } } private string ConverRMBNOToStr(string p) { switch (p) { case "1": return "壹"; break; case "2": return "贰"; break; case "3": return "叁"; break; case "4": return "肆"; break; case "5": return "伍"; break; case "6": return "陆"; break; case "7": return "柒"; break; case "8": return "捌"; break; case "9": return "玖"; break; default: return " "; break; }
相关文章推荐
- .NET把小写数字金额转换成大写人民币金额的两种算法
- C#小写数字金额转换成大写人民币金额的算法
- 【Oracle】函数实现:人民币小写转换成发票大写方式
- 算法:Unicode版人民币小写金额转大写金额
- jscript实现的客户端小写金额转换成人民币大写金额(最大千万元位)
- 人民币小写转换为大写
- jscript实现的客户端小写金额转换成人民币大写金额(最大千万元位)
- 算法--java实现将数字转换成人民币大写(迅雷面试题)
- 人民币小写转换成大写
- 【Help】使用C C++或者C#语言编写:人民币小写转换成大写的程序!谢谢。。。
- 人民币小写转换为大写
- .Net小写转换成大写的人民币详细代码
- 小写转换大写(人民币)
- JS实现人民币小写转换成汉字大写
- 利用创建型工厂方法模式编写小写数字金额转换为人民币大写C#代码。
- 人民币小写转换为大写(SQLSERVER FUNCTION
- PHP 实现人民币小写转换成大写的方法及大小写转换函数
- sql server数字小写人民币转换成大写人民币(两种方式)
- js将人民币小写金额转换为大写
- JS实现人民币小写转换成汉字大写