//// <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. extjs两个tbar问题

      版本:extjs3.4   接触过extjs的同志们都知道每个panel都有一个tbar(top bar 上面工具栏) ,bbar(bottom bar 底部工具栏)      大家做查询页面,一 ...

  2. 【转】vlc android 代码编译

    转自:http://blog.csdn.net/asircao/article/details/7734201 系统:ubuntu12.04代码:git://git.videolan.org/vlc- ...

  3. JS学习笔记-数组

    ECMAScript中没有提供类和接口等的定义,但它却是一门面向对象的语言,由于它能够通过其它 方式实现类似高级语言的面向对象功能,这些内容将在后面的文章中进行一步步的总结.此篇仅对JS中对象作简要说 ...

  4. JAVA wait(), notify(),sleep具体解释

    在CSDN开了博客后,一直也没在上面公布过文章,直到前一段时间与一位前辈的对话,才发现技术博客的重要,立志要把CSDN的博客建好.但一直没有找到好的开篇的主题,今天再看JAVA线程相互排斥.同步的时候 ...

  5. [IDEA学习笔记][keymap]

    一个总站: http://www.youmeek.com/ 常用的快捷键keymap 提示: ctrl+N:快速打开一个类 Ctrl+P 方法参数提示显示 Ctrl+J 提示自定义模板 Ctrl+O ...

  6. jquery列表动画

    //新闻导航 (function (){ //获取分类名称 var _text = $('.news .news-wrapper .news-left .news-left-title .positi ...

  7. PHP学习笔记三十一【const】

    <?php //常量都是public类型 // const 常量名=赋值 .变量名不需要加$符号,也不需要要访问修饰符,默认就是public class A{ const TAX_RATE=0. ...

  8. ios10 适配问题总结

    看各个大神整理而成 1.检查版本问题 不可以像下面这样用 #define isiOS10 ([[[[UIDevice currentDevice] systemVersion] substringTo ...

  9. (原)不明白JNI指针调用顺序

    很不明白JNI里面获取指针的顺序(可能这样描述不太恰当吧). 下面按照传入指针的顺序的代码一跑就崩溃.如下: JNIEXPORT jint JNICALL Java_com_example_X_XX_ ...

  10. 三星ssd转移系统

    1. (正常模式)如果源磁盘小于目标磁盘   第 1 步 . 开始迁移   第 2 步 . 连接目标磁盘  ① 目标磁盘连接后,其状态会显示在屏幕上.  ※ 如果您要连接 mSATA 产品,那么还需要 ...