//// <summary>
/// 人民币大小写金额转换
/// </summary>
class RMBCapitalization
{
private const string DXSZ = "零壹贰叁肆伍陆柒捌玖";
private const string DXDW = "毫厘分角元拾佰仟萬拾佰仟亿拾佰仟萬兆拾佰仟萬亿京拾佰仟萬亿兆垓";
private const string SCDW = "元拾佰仟萬亿京兆垓"; /// <summary>
/// 转换整数为大写金额
/// 最高精度为垓,保留小数点后4位,实际精度为亿兆已经足够了,理论上精度无限制,如下所示:
/// 序号:...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
/// 单位:...垓兆亿萬仟佰拾 京亿萬仟佰拾 兆萬仟佰拾 亿仟佰拾 萬仟佰拾元 . 角分厘毫
/// 数值:...1000000 000000 00000 0000 00000 . 0000
/// 下面列出网上搜索到的数词单位:
/// 元、十、百、千、万、亿、兆、京、垓、秭、穰、沟、涧、正、载、极
/// </summary>
/// <param name="capValue">整数值</param>
/// <returns>返回大写金额</returns>
private static string ConvertIntToUppercaseAmount(string capValue)
{
string currCap = ""; //当前金额
string capResult = ""; //结果金额
string currentUnit = "";//当前单位
string resultUnit = ""; //结果单位
int prevChar = -; //上一位的值
int currChar = ; //当前位的值
int posIndex = ; //位置索引,从"元"开始 if (Convert.ToDouble(capValue) == ) return "";
for (int i = capValue.Length - ; i >= ; i--)
{
currChar = Convert.ToInt16(capValue.Substring(i, ));
if (posIndex > )
{
//已超出最大精度"垓"。注:可以将30改成22,使之精确到兆亿就足够了
break;
}
else if (currChar != )
{
//当前位为非零值,则直接转换成大写金额
currCap = DXSZ.Substring(currChar, ) + DXDW.Substring(posIndex, );
}
else
{
//防止转换后出现多余的零,例如:3000020
switch (posIndex)
{
case : currCap = "元"; break;
case : currCap = "萬"; break;
case : currCap = "亿"; break;
case : currCap = "兆"; break;
case : currCap = "京"; break;
case : currCap = "垓"; break;
default: break;
}
if (prevChar != )
{
if (currCap != "")
{
if (currCap != "元") currCap += "零";
}
else
{
currCap = "零";
}
}
}
//对结果进行容错处理
if (capResult.Length > )
{
resultUnit = capResult.Substring(, );
currentUnit = DXDW.Substring(posIndex, );
if (SCDW.IndexOf(resultUnit) > )
{
if (SCDW.IndexOf(currentUnit) > SCDW.IndexOf(resultUnit))
{
capResult = capResult.Substring();
}
}
}
capResult = currCap + capResult;
prevChar = currChar;
posIndex += ;
currCap = "";
}
return capResult;
} /// <summary>
/// 转换小数为大写金额
/// </summary>
/// <param name="capValue">小数值</param>
/// <param name="addZero">是否增加零位</param>
/// <returns>返回大写金额</returns>
private static string ConvertDecToUppercaseAmount(string capValue, bool addZero)
{
string currCap = "";
string capResult = "";
int prevChar = addZero ? - : ;
int currChar = ;
int posIndex = ; if (Convert.ToInt16(capValue) == ) return "";
for (int i = ; i < capValue.Length; i++)
{
currChar = Convert.ToInt16(capValue.Substring(i, ));
if (currChar != )
{
currCap = DXSZ.Substring(currChar, ) + DXDW.Substring(posIndex, );
}
else
{
if (Convert.ToInt16(capValue.Substring(i)) == )
{
break;
}
else if (prevChar != )
{
currCap = "零";
}
}
capResult += currCap;
prevChar = currChar;
posIndex -= ;
currCap = "";
}
return capResult;
} /// <summary>
/// 人民币大写金额
/// </summary>
/// <param name="value">人民币数字金额值</param>
/// <returns>返回人民币大写金额</returns>
public static string RMBAmount(double value)
{
string capResult = "";
string capValue = string.Format("{0:f4}", value); //格式化
int dotPos = capValue.IndexOf("."); //小数点位置
bool addInt = (Convert.ToInt32(capValue.Substring(dotPos + )) == );//是否在结果中加"整"
bool addMinus = (capValue.Substring(, ) == "-"); //是否在结果中加"负"
int beginPos = addMinus ? : ; //开始位置
string capInt = capValue.Substring(beginPos, dotPos); //整数
string capDec = capValue.Substring(dotPos + ); //小数 if (dotPos > )
{
capResult = ConvertIntToUppercaseAmount(capInt) +
ConvertDecToUppercaseAmount(capDec, Convert.ToDouble(capInt) != ? true : false);
}
else
{
capResult = ConvertIntToUppercaseAmount(capDec);
}
if (addMinus) capResult = "负" + capResult;
if (addInt) capResult += "整";
return capResult;
}
}

此类方法实现了将人民币数字金额转换为小写,直接调用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. Android NDK R9d 安装

    NDK是一个工具集,可让您实现您的应用程序使用本机代码的语言,如C和C + +.Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Go ...

  2. qt简单界面更新代码(菜鸟级)(部分代码)

    qt简单界面更新代码(菜鸟级)(部分代码)self.timers_1=QtCore.QTimer(self)self.timers_1.timeout.connect(self.min_1)self. ...

  3. All X(思维)

    All X Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Subm ...

  4. Spring AOP应用实例demo

    AOP(Aspect-Oriented Programming.面向方面编程).能够说是OOP(Object-OrientedPrograming.面向对象编程)的补充和完好.OOP引入封装.继承和多 ...

  5. 连载:面向对象葵花宝典:思想、技巧与实践(33) - ISP原则

     ISP,Interface Segregation Principle,中文翻译为"接口隔离原则". 和DIP原则一样,ISP原则也是大名鼎鼎的Martin大师提出来的,他在19 ...

  6. jquery插件datepicker

    jQuery UI很强大,其中的日期选择插件Datepicker是一个配置灵活的插件,我们可以自定义其展示方式,包括日期格式.语言.限制选择日期范围.添加相关按钮以及其它导航等. <script ...

  7. Android零碎知识点总结

    1 简单的跨进程通信可以用Messenger类,不用AIDL. 2 当一个Service没有action时,它默认是exported="false"的,其它进程用它的包名和类名构造 ...

  8. Win7刷新环境变量

    在“我的电脑”->“属性”->“高级”->“环境变量”中增加或修改环境变量后,需重启系统才能使之生效.有没有什么方法可让它即时生效呢? 下面介绍一种方法: 以修改环境变量“PATH” ...

  9. .net 基础之截取字符串

    在实际开发中有时难免会遇到需要获取某个字符串中的某些字符串,这里我们可以用到字符串截取的办法. 截取字符串的方法很容易(暂不包含中文字符串),只要稍微有点.net基础的人看了都能看懂. /// < ...

  10. break,continue,return 区别

    using System;using System.Collections.Generic;using System.Text; namespace breakcontinue_test{    cl ...