使用C#实现阿拉伯数字到大写中文的转换
更新时间:2020年6月25日 11:48 点击:1765
先记下来,以备后用!
/// <summary> /// 金额转为大写金额 /// </summary> public class MoneyConvertChinese { /// <summary> /// 金额转为大写金额 /// </summary> /// <param name="LowerMoney"></param> /// <returns></returns> public string MoneyToChinese(string LowerMoney) { string functionReturnValue = null; bool IsNegative = false; // 是否是负数 if (LowerMoney.Trim().Substring(0, 1) == "-") { // 是负数则先转为正数 LowerMoney = LowerMoney.Trim().Remove(0, 1); IsNegative = true; } string strLower = null; string strUpart = null; string strUpper = null; int iTemp = 0; // 保留两位小数 123.489→123.49 123.4→123.4 LowerMoney = Math.Round(double.Parse(LowerMoney), 2).ToString(); if (LowerMoney.IndexOf(".") > 0) { if (LowerMoney.IndexOf(".") == LowerMoney.Length - 2) { LowerMoney = LowerMoney + "0"; } } else { LowerMoney = LowerMoney + ".00"; } strLower = LowerMoney; iTemp = 1; strUpper = ""; while (iTemp <= strLower.Length) { switch (strLower.Substring(strLower.Length - iTemp, 1)) { case ".": strUpart = "圆"; break; case "0": strUpart = "零"; break; case "1": strUpart = "壹"; break; case "2": strUpart = "贰"; break; case "3": strUpart = "叁"; break; case "4": strUpart = "肆"; break; case "5": strUpart = "伍"; break; case "6": strUpart = "陆"; break; case "7": strUpart = "柒"; break; case "8": strUpart = "捌"; break; case "9": strUpart = "玖"; break; } switch (iTemp) { case 1: strUpart = strUpart + "分"; break; case 2: strUpart = strUpart + "角"; break; case 3: strUpart = strUpart + ""; break; case 4: strUpart = strUpart + ""; break; case 5: strUpart = strUpart + "拾"; break; case 6: strUpart = strUpart + "佰"; break; case 7: strUpart = strUpart + "仟"; break; case 8: strUpart = strUpart + "万"; break; case 9: strUpart = strUpart + "拾"; break; case 10: strUpart = strUpart + "佰"; break; case 11: strUpart = strUpart + "仟"; break; case 12: strUpart = strUpart + "亿"; break; case 13: strUpart = strUpart + "拾"; break; case 14: strUpart = strUpart + "佰"; break; case 15: strUpart = strUpart + "仟"; break; case 16: strUpart = strUpart + "万"; break; default: strUpart = strUpart + ""; break; } strUpper = strUpart + strUpper; iTemp = iTemp + 1; } strUpper = strUpper.Replace("零拾", "零"); strUpper = strUpper.Replace("零佰", "零"); strUpper = strUpper.Replace("零仟", "零"); strUpper = strUpper.Replace("零零零", "零"); strUpper = strUpper.Replace("零零", "零"); strUpper = strUpper.Replace("零角零分", "整"); strUpper = strUpper.Replace("零分", "整"); strUpper = strUpper.Replace("零角", "零"); strUpper = strUpper.Replace("零亿零万零圆", "亿圆"); strUpper = strUpper.Replace("亿零万零圆", "亿圆"); strUpper = strUpper.Replace("零亿零万", "亿"); strUpper = strUpper.Replace("零万零圆", "万圆"); strUpper = strUpper.Replace("零亿", "亿"); strUpper = strUpper.Replace("零万", "万"); strUpper = strUpper.Replace("零圆", "圆"); strUpper = strUpper.Replace("零零", "零"); // 对壹圆以下的金额的处理 if (strUpper.Substring(0, 1) == "圆") { strUpper = strUpper.Substring(1, strUpper.Length - 1); } if (strUpper.Substring(0, 1) == "零") { strUpper = strUpper.Substring(1, strUpper.Length - 1); } if (strUpper.Substring(0, 1) == "角") { strUpper = strUpper.Substring(1, strUpper.Length - 1); } if (strUpper.Substring(0, 1) == "分") { strUpper = strUpper.Substring(1, strUpper.Length - 1); } if (strUpper.Substring(0, 1) == "整") { strUpper = "零圆整"; } functionReturnValue = strUpper; if (IsNegative == true) { return "负" + functionReturnValue; } else { return functionReturnValue; } } }
测试代码:
static void Main(string[] args) { Console.Write("请输入要转成大写的数字:"); string str = Console.ReadLine(); Console.WriteLine("大写:" + new MoneyConvertChinese().MoneyToChinese(str)); Console.ReadLine(); }
测试结果:
下面是其它网友的补充:
using System; namespace ConsoleApp { /// <summary> /// 本类实现阿拉伯数字到大写中文的转换 /// 该类没有对非法数字进行判别 /// 请调用NumToChn方法 /// </summary> public class NumFormat { public NumFormat() { // // TODO: 在此处添加构造函数逻辑 // } // 转换数字 private char ToNum(char x) { string strChnNames="零一二三四五六七八九"; string strNumNames="0123456789"; return strChnNames[strNumNames.IndexOf(x)]; } // 转换万以下整数 private string ChangeInt(string x) { string[] strArrayLevelNames=new string[4] {"","十","百","千"}; string ret = ""; int i; for (i=x.Length-1;i>=0;i--) if (x[i] == '0') ret = ToNum(x[i]) + ret; else ret = ToNum(x[i]) + strArrayLevelNames[x.Length-1-i] + ret; while ((i=ret.IndexOf("零零"))!=-1) ret=ret.Remove(i, 1); if (ret[ret.Length-1]=='零' && ret.Length>1) ret=ret.Remove(ret.Length-1,1); if (ret.Length>=2 && ret.Substring(0,2)=="一十") ret=ret.Remove(0,1); return ret; } // 转换整数 private string ToInt(string x) { int len = x.Length; string ret,temp; if (len<=4) ret = ChangeInt(x); else if (len<=8) { ret = ChangeInt(x.Substring(0,len-4)) + "万"; temp = ChangeInt(x.Substring(len-4,4)); if (temp.IndexOf("千")==-1 && temp!="") ret += "零" + temp; else ret += temp; } else { ret=ChangeInt(x.Substring(0,len-8)) + "亿"; temp=ChangeInt(x.Substring(len-8,4)); if (temp.IndexOf("千")==-1 && temp!="") ret += "零" + temp; else ret += temp; ret += "万"; temp = ChangeInt(x.Substring(len-4,4)); if (temp.IndexOf("千")==-1 && temp!="") ret += "零" + temp; else ret += temp; } int i; if ((i=ret.IndexOf("零万"))!=-1) ret = ret.Remove(i+1,1); while ((i=ret.IndexOf("零零"))!=-1) ret = ret.Remove(i,1); if (ret[ret.Length-1]=='零' && ret.Length>1) ret = ret.Remove(ret.Length-1,1); return ret; } private string ToDecimal(string x) { string ret=""; for (int i=0;i<x.Length;i++) ret += ToNum(x[i]); return ret; } public string NumToChn(string x) { if (x.Length==0) return ""; string ret=""; if (x[0]=='-') { ret="负"; x=x.Remove(0,1); } if (x[0].ToString()==".") x="0"+x; if (x[x.Length-1].ToString()==".") x=x.Remove(x.Length-1,1); if (x.IndexOf(".")>-1) ret += ToInt(x.Substring(0,x.IndexOf(".")))+"点"+ToDecimal(x.Substring(x.IndexOf(".")+1)); else ret += ToInt(x); return ret; } } }
测试工程
using System; namespace ConsoleApp { class MainClass { static void Main(string[] args) { /* System.Console.WriteLine("Hello, The World!"); System.Console.WriteLine("My Love!"); ClassTest ct = new ClassTest(); System.Console.WriteLine(ct.Get_Str()); */ /* // 重载运算符 MyVector v1 = new MyVector(5, 12); MyVector v2 = new MyVector(4, 3); MyVector v3 = new MyVector(); v3 = v1 + v2; System.Console.WriteLine("{0}测试一下", v3.Length); */ // 转换成大写数字 NumFormat nf = new NumFormat(); string x; while (true) { Console.Write("X="); x = Console.ReadLine(); if (x == "") break; Console.WriteLine("{0}={1}", x, nf.NumToChn(x)); } } } }
上一篇: 提取HTML代码中文字的C#函数
相关文章
- Create Procedure AtoC @ChangeMoney Money as Set Nocount ON Declare @String1 char(20) Declare @String2 char(30) ...2016-11-25
- 这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
- 这篇文章主要为大家详细介绍了C#实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 设置登录密码我们一般会有限制的如由什么组合了,下面我们来看一篇关于安卓开发之设置密码只能输入字母和数字的组合方法,具体的细节如下所示。 无论是电脑还是手机...2016-09-20
- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
php导出csv格式数据并将数字转换成文本的思路以及代码分享
php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07- 这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C#将数字转换成字节数组的方法,涉及C#字符串操作的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C++实现数字转换为十六进制字符串的方法,涉及C++操作数字与字符串转换的相关技巧,需要的朋友可以参考下...2020-04-25
- php实现数字格式化,数字每三位加逗号的功能函数,具体代码如下: function num_format($num){ if(!is_numeric($num)){ return false; } $num = explode('.',$num);//把整数和小数分开 $rl = $num[1];//小数部分的值...2015-10-23
- 这篇文章主要介绍了Lua判断变量是否为数字、字符串是否可以转换为数字等,本文讲解了Lua 判断是字符还是数字的方法、Lua判断数字的方法、判断可否转换为数字的方法、判断并且准备一个初值的方法,需要的朋友可以参考下...2020-06-30
- 复制代码 代码如下: $str='asb天水市12'; if (preg_match("/^[/x7f-/xff]+$/", $str)){ echo '全部是汉字'; }else { echo '不全是汉字'; } /** PHP自带的判断是否是中文, eregi('[^/x00-/x7F]', $str ) //中文 ereg...2013-10-04
- 这篇文章主要介绍了python基于OpenCV模板匹配识别图片中的数字,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-03-31
- 这篇文章主要介绍了C++ 随机数字以及随机数字加字母生成的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-11
- // 原是是根据用户输入的数字判断再转换成想要的大写数字,如果我们先把大小写存在一个数组,再判断进行转换就OK了。 $data = $_POST['rmb']; if (!ereg("^[0-9.]",$dat...2016-11-25
- 这篇文章主要介绍了javascript常见数字进制转换,结合实例形式分析了JavaScript十进制,十六进制及二进制的相互转换原理与技巧,需要的朋友可以参考下...2016-04-23
- 这篇文章主要介绍了c++连续输入未知个数的数字操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-09
- 这篇文章主要介绍了JS验证逗号隔开可以是中文字母数字 的相关资料,需要的朋友可以参考下...2016-04-24
- 下面小编就为大家带来一篇文本框只能输入数字的实现方法(兼容IE火狐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-07-01