人民币金额大小写转换,三行代码

//完善了一下查询到的方法,支持小数,保留2位小数

  1. public string NumGetStr(double Num)
  2. {
  3. string[] DX_SZ = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };//大写数字
  4. string[] DX_DW = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万" };
  5. string[] DX_XSDS = { "角", "分" };//大些小数单位
  6. if (Num == 0) return DX_SZ[0];
  7. Boolean IsXS_bool = false;//是否小数
  8. string NumStr;//整个数字字符串
  9. string NumStr_Zs;//整数部分
  10. string NumSr_Xs = "";//小数部分
  11. string NumStr_R = "";//返回的字符串
  12. NumStr = Num.ToString();
  13. NumStr_Zs = NumStr;
  14. if (NumStr_Zs.Contains("."))
  15. {
  16. NumStr = Math.Round(Num, 2).ToString();
  17. NumStr_Zs = NumStr.Substring(0, NumStr.IndexOf("."));
  18. NumSr_Xs = NumStr.Substring((NumStr.IndexOf(".") + 1), (NumStr.Length - NumStr.IndexOf(".") - 1));
  19. IsXS_bool = true;
  20. }
  21. int k = 0;
  22. Boolean IsZeor = false;//整数中间连续0的情况
  23. for (int i = 0; i < NumStr_Zs.Length; i++) //整数
  24. {
  25. int j = int.Parse(NumStr_Zs.Substring(i, 1));
  26. if (j != 0)
  27. {
  28. NumStr_R += DX_SZ[j] + DX_DW[NumStr_Zs.Length - i - 1];
  29. IsZeor = false; //没有连续0
  30. }
  31. else if (j == 0)
  32. {
  33. k++;
  34. if (!IsZeor && !(NumStr_Zs.Length == i + 1)) //等于0不是最后一位,连续0取一次
  35. {
  36. //有问题
  37. if (NumStr_Zs.Length - i - 1 >= 4 && NumStr_Zs.Length - i - 1<=6)
  38. NumStr_R += DX_DW[4] + "零";
  39. else
  40. if (NumStr_Zs.Length - i - 1 > 7)
  41. NumStr_R += DX_DW[8] + "零";
  42. else
  43. NumStr_R += "零";
  44. IsZeor = true;
  45. }
  46. if (NumStr_Zs.Length == i + 1)//  等于0且是最后一位 变成 XX元整
  47. NumStr_R += DX_DW[NumStr_Zs.Length - i - 1];
  48. }
  49. }
  50. if (NumStr_Zs.Length>2 && k == NumStr_Zs.Length - 1)
  51. NumStr_R = NumStr_R.Remove(NumStr_R.IndexOf('零'), 1); //比如1000,10000元整的情况下 去0
  52. if (!IsXS_bool) return NumStr_R + "整"; //如果没有小数就返回
  53. else
  54. {
  55. for (int i = 0; i < NumSr_Xs.Length; i++)
  56. {
  57. int j = int.Parse(NumSr_Xs.Substring(i, 1));
  58. NumStr_R += DX_SZ[j] + DX_XSDS[NumSr_Xs.Length - i - 1];
  59. }
  60. }
  61. return NumStr_R;
  62. }

2016.6.16更新。

发现这么一段代码,我整个人都。。

  1. public static String ConvertToChinese(Decimal number)
  2. {
  3. var s = number.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
  4. var d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
  5. var r = Regex.Replace(d, ".", m => "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万亿兆京垓秭穰"[m.Value[0] - '-'].ToString());
  6. return r;
  7. }

上面那么一大段的这几句也可以实现 呵呵.. Interesting

正则真强大。

C#人民币金额大写转换的更多相关文章

  1. js浮点数计算问题 + 金额大写转换

    一 js浮点数计算问题解决方案: 1.使用 NumberObject.toFixed(num) 方法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 2.较精度计算浮点数 ...

  2. JS进行人民币大小写转换

    //数字金额大写转换(可以处理整数,小数,负数) function upDigit() { digit=$("#digit").html(); n=digit.replace(/\ ...

  3. FastReport调用Delphi中的人民币大写转换自定义函数

    FastReport调用Delphi中的人民币大写转换自定义函数   FastReport调用Delphi中的人民币大写转换自定义函数 function TJzpzEdit1.MoneyCn(mmje ...

  4. JS数字金额大写转换

    /** 数字金额大写转换(可以处理整数,小数,负数) */ var digitUppercase = function(n) { var fraction = ['角', '分']; var digi ...

  5. Java版 数字金额大写转换

    需求:读入一个浮点数值,将其转化为中文金额的大写形式.如123.45,转化为:壹佰贰拾叁元肆角伍分. 以下是各种情况要完善: 1. 当金额为整数,只表示整数部分,省略小数部分,并添加“整”字.如123 ...

  6. python实现人民币大写转换

    问题描述: 银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序. 在中文大写方式中,0到10以及100.1000.10000被依次表示为: 零 壹 贰 ...

  7. java实现人民币金额大写

    在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序. 本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况). 比如,用户输 ...

  8. 人民币大写金额转换C#方法

    方法的代码如下: /// <summary> /// 人民币大写 /// </summary> /// <param name="input"> ...

  9. java人民币读法转换

    实现浮点数转换成人民币读法字符串 编写一个程序,将浮点数转换成人民币读法字符串,例如,将1006.333转换为壹千零陆元叁角叁分. 题意分析: 将浮点数分成整数部分和小数部分,分开处理整数部分和小数部 ...

随机推荐

  1. Linux whatis命令失效 nothing appropriate

    在虚拟机中安装Linux的时候,可能没有生成whatis的数据库,所以whatis的命令无法使用. 如果出现无法使用whatis命令失效,那就生成whatis数据库. 命令: /usr/sbin/ma ...

  2. Nginx的正则表达式

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Ра ...

  3. StringBuffer的s1.capacity()是多少?

    定义有StringBuffer s1=new StringBuffer(10);s1.append(“1234”)则s1.length()和s1.capacity()分别是多少? StringBuff ...

  4. Linux shell - shift命令用法(转载)

    位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shift命令相当于shift 1. 非常 ...

  5. LeetCode_1116.打印零与奇偶数(多线程)

    LeetCode_1116 LeetCode-1116.打印零与奇偶数 假设有这么一个类: class ZeroEvenOdd { public ZeroEvenOdd(int n) { ... } ...

  6. LeetCode_509.斐波那契数

    LeetCode-cn_509 509.斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) ...

  7. 分析邮件日志从每秒处理3个结果到每秒处理800个结果过程(grep提速)

    由于业务需要,对EDM发出的邮件日志进行分析处理,我要做的是预处理,把posfix杂乱无章的日志中找到我需要的数据. 我用javamail发的邮件,发送邮件时获取到是一个messageId,形如:21 ...

  8. Ubuntu16.04 国内源 source 注意事项

    注意对应关系 Ubuntu16.04 为 xenial 如果贴错了 在你执行 sudo apt-get upgrade 的时候很麻烦.很慢会更新到 另外版本系统中. 被坑过…… 阿里云源 deb ht ...

  9. vue中的$EventBus.$emit、$on的应用

    今天在项目中遇到的一个需求: 在一个选项卡功能的页面,出现的问题是,当点击选项卡的某个选项时,会同时加载整个选项卡的数据,本身产品就很大,数据很多,所以这个问题无法忽略: 仔细研究下发现,当刚进入页面 ...

  10. python+selenium切换窗口(获取句柄信息)

    current_window_handle:获得当前窗口句柄: window_handles:返回所有窗口的句柄到当前会话: switch_to.window(suoyou[0]) ========= ...