1. //// <summary>
  2. /// 人民币大小写金额转换
  3. /// </summary>
  4. class RMBCapitalization
  5. {
  6. private const string DXSZ = "零壹贰叁肆伍陆柒捌玖";
  7. private const string DXDW = "毫厘分角元拾佰仟萬拾佰仟亿拾佰仟萬兆拾佰仟萬亿京拾佰仟萬亿兆垓";
  8. private const string SCDW = "元拾佰仟萬亿京兆垓";
  9.  
  10. /// <summary>
  11. /// 转换整数为大写金额
  12. /// 最高精度为垓,保留小数点后4位,实际精度为亿兆已经足够了,理论上精度无限制,如下所示:
  13. /// 序号:...30.29.28.27.26.25.24 23.22.21.20.19.18 17.16.15.14.13 12.11.10.9 8 7.6.5.4 . 3.2.1.0
  14. /// 单位:...垓兆亿萬仟佰拾 京亿萬仟佰拾 兆萬仟佰拾 亿仟佰拾 萬仟佰拾元 . 角分厘毫
  15. /// 数值:...1000000 000000 00000 0000 00000 . 0000
  16. /// 下面列出网上搜索到的数词单位:
  17. /// 元、十、百、千、万、亿、兆、京、垓、秭、穰、沟、涧、正、载、极
  18. /// </summary>
  19. /// <param name="capValue">整数值</param>
  20. /// <returns>返回大写金额</returns>
  21. private static string ConvertIntToUppercaseAmount(string capValue)
  22. {
  23. string currCap = ""; //当前金额
  24. string capResult = ""; //结果金额
  25. string currentUnit = "";//当前单位
  26. string resultUnit = ""; //结果单位
  27. int prevChar = -; //上一位的值
  28. int currChar = ; //当前位的值
  29. int posIndex = ; //位置索引,从"元"开始
  30.  
  31. if (Convert.ToDouble(capValue) == ) return "";
  32. for (int i = capValue.Length - ; i >= ; i--)
  33. {
  34. currChar = Convert.ToInt16(capValue.Substring(i, ));
  35. if (posIndex > )
  36. {
  37. //已超出最大精度"垓"。注:可以将30改成22,使之精确到兆亿就足够了
  38. break;
  39. }
  40. else if (currChar != )
  41. {
  42. //当前位为非零值,则直接转换成大写金额
  43. currCap = DXSZ.Substring(currChar, ) + DXDW.Substring(posIndex, );
  44. }
  45. else
  46. {
  47. //防止转换后出现多余的零,例如:3000020
  48. switch (posIndex)
  49. {
  50. case : currCap = "元"; break;
  51. case : currCap = "萬"; break;
  52. case : currCap = "亿"; break;
  53. case : currCap = "兆"; break;
  54. case : currCap = "京"; break;
  55. case : currCap = "垓"; break;
  56. default: break;
  57. }
  58. if (prevChar != )
  59. {
  60. if (currCap != "")
  61. {
  62. if (currCap != "元") currCap += "零";
  63. }
  64. else
  65. {
  66. currCap = "零";
  67. }
  68. }
  69. }
  70. //对结果进行容错处理
  71. if (capResult.Length > )
  72. {
  73. resultUnit = capResult.Substring(, );
  74. currentUnit = DXDW.Substring(posIndex, );
  75. if (SCDW.IndexOf(resultUnit) > )
  76. {
  77. if (SCDW.IndexOf(currentUnit) > SCDW.IndexOf(resultUnit))
  78. {
  79. capResult = capResult.Substring();
  80. }
  81. }
  82. }
  83. capResult = currCap + capResult;
  84. prevChar = currChar;
  85. posIndex += ;
  86. currCap = "";
  87. }
  88. return capResult;
  89. }
  90.  
  91. /// <summary>
  92. /// 转换小数为大写金额
  93. /// </summary>
  94. /// <param name="capValue">小数值</param>
  95. /// <param name="addZero">是否增加零位</param>
  96. /// <returns>返回大写金额</returns>
  97. private static string ConvertDecToUppercaseAmount(string capValue, bool addZero)
  98. {
  99. string currCap = "";
  100. string capResult = "";
  101. int prevChar = addZero ? - : ;
  102. int currChar = ;
  103. int posIndex = ;
  104.  
  105. if (Convert.ToInt16(capValue) == ) return "";
  106. for (int i = ; i < capValue.Length; i++)
  107. {
  108. currChar = Convert.ToInt16(capValue.Substring(i, ));
  109. if (currChar != )
  110. {
  111. currCap = DXSZ.Substring(currChar, ) + DXDW.Substring(posIndex, );
  112. }
  113. else
  114. {
  115. if (Convert.ToInt16(capValue.Substring(i)) == )
  116. {
  117. break;
  118. }
  119. else if (prevChar != )
  120. {
  121. currCap = "零";
  122. }
  123. }
  124. capResult += currCap;
  125. prevChar = currChar;
  126. posIndex -= ;
  127. currCap = "";
  128. }
  129. return capResult;
  130. }
  131.  
  132. /// <summary>
  133. /// 人民币大写金额
  134. /// </summary>
  135. /// <param name="value">人民币数字金额值</param>
  136. /// <returns>返回人民币大写金额</returns>
  137. public static string RMBAmount(double value)
  138. {
  139. string capResult = "";
  140. string capValue = string.Format("{0:f4}", value); //格式化
  141. int dotPos = capValue.IndexOf("."); //小数点位置
  142. bool addInt = (Convert.ToInt32(capValue.Substring(dotPos + )) == );//是否在结果中加"整"
  143. bool addMinus = (capValue.Substring(, ) == "-"); //是否在结果中加"负"
  144. int beginPos = addMinus ? : ; //开始位置
  145. string capInt = capValue.Substring(beginPos, dotPos); //整数
  146. string capDec = capValue.Substring(dotPos + ); //小数
  147.  
  148. if (dotPos > )
  149. {
  150. capResult = ConvertIntToUppercaseAmount(capInt) +
  151. ConvertDecToUppercaseAmount(capDec, Convert.ToDouble(capInt) != ? true : false);
  152. }
  153. else
  154. {
  155. capResult = ConvertIntToUppercaseAmount(capDec);
  156. }
  157. if (addMinus) capResult = "负" + capResult;
  158. if (addInt) capResult += "整";
  159. return capResult;
  160. }
  161. }

此类方法实现了将人民币数字金额转换为小写,直接调用RMBCapitalization.RMBAmount(人民币数字金额)

c#将输入的人民币数字金额转换成小写的更多相关文章

  1. C#小写数字金额转换成大写人民币金额的算法

    C#小写数字金额转换成大写人民币金额的算法 第一种方法: using System.Text.RegularExpressions;//首先引入命名空间 private string DaXie(st ...

  2. JavaScript将输入的数字金额转换成对应的中文大写金额

    // 将输入的数字金额转换成对应的中文大写金额 // idNumber输入的数字金额,idCHN输出的中文大写金额 function TransformNumberIntoCHN(idNumber, ...

  3. PHP算法--将数字金额转换成大写金额

    最近在看一些PHP算法题,遇到一个将数字金额转换成大写金额的小算法题,这里贴出自己的一个例子. 注:这个小算法适用于10万以内的金额. <?php //$num = 12345.67; func ...

  4. PHP 数字金额转换成中文大写金额的函数 数字转中文

    /** *数字金额转换成中文大写金额的函数 *String Int $num 要转换的小写数字或小写字符串 *return 大写字母 *小数位为两位 **/ function num_to_rmb($ ...

  5. JS把数字金额转换成中文大写数字的函数

    //把数字金额转换成中文大写数字的函数 function num2rmb ($num){ $c1="零壹贰叁肆伍陆柒捌玖"; $c2="分角元拾佰仟万拾佰仟亿" ...

  6. irport报表,把数字金额转换成大写人民币金额

    1.编写oracle函数 CREATE OR REPLACE Function MoneyToChinese(Money In Number) Return Varchar2 Is strYuan ) ...

  7. PHP数字金额转换大写金额

    早些年做CRM用到的一个金额转换函数,今天从旧项目中拿出来记录一下.金额转换的函数方法有很多,都很不错.不过这个是小崔刚工作的时候写的一个转换函数,多少还是有点纪念意义.如有问题请朋友们指出,小崔及时 ...

  8. c#金额转换成中文大写金额

    2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> /// <param ...

  9. c#金额转换成中文大写金额 .Net开发Windows服务

    c#金额转换成中文大写金额   2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> ...

随机推荐

  1. 2个2D向量计算交点的夹角和补角

    2维向量如何计算与某一个交点之间的夹角,假设A,B是向量,C是他们共同连接的一个点计算出A-C-B形成的角度   我们先了解几个简单的计算: 2D向量的乘积计算 (A.x * B.x + A.y * ...

  2. mysql保存emoji表情(微信开发用户昵称..)

      java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum n 'name' at row 1 at c ...

  3. sqlite3安装

    SQLite命令行程序(CLP)是开始使用SQLite的最好选择,按照如下步骤获取CLP: 1).打开浏览器进入SQLite主页,www.sqlite.org. 2).单击页面顶部的下载链接(Down ...

  4. Socket介绍

    一 socket协议 Socket协议的形象描述 socket的英文原义是“孔”或“插座”.在这里作为4BDS UNIX的进程通信机制,取后一种意思.socket非常类似于电话插座.以一个国家级电话网 ...

  5. vs2012 boost配置

    1.去www.boost.org下载最新的boost,我下载了boost_1_60_02.(我放在D:/cpp目录下)解压到当前文件夹3.打开VS2012->VS TOOLS->VS命令提 ...

  6. tableView特色用法

    // //  ViewController.m //  UITableView // //  Created by yhj on 15/12/15. //  Copyright © 2015年 QQ: ...

  7. WCF入门教程系列一

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  8. JavaScript---while和do while的区别

    JavaScript,while 和do while的区别: 场景一:小盒子身上有100元,用while输出能吃多少次米线,一碗米线12元,最终还剩下多少钱. var money = 100; whi ...

  9. c中关于#与##的简易使用

    #运算符用于在预编译时,将宏参数转换为字符串 eg. #include <stdio.h>#define CONVERT(f)(#f) void helloworld(){ printf( ...

  10. mysql dos启动出现1067错误的解决方法

    请参看下面的链接:http://www.webjx.com/htmldata/2007-10-16/1192542247.html