c#将输入的人民币数字金额转换成小写
//// <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#将输入的人民币数字金额转换成小写的更多相关文章
- C#小写数字金额转换成大写人民币金额的算法
C#小写数字金额转换成大写人民币金额的算法 第一种方法: using System.Text.RegularExpressions;//首先引入命名空间 private string DaXie(st ...
- JavaScript将输入的数字金额转换成对应的中文大写金额
// 将输入的数字金额转换成对应的中文大写金额 // idNumber输入的数字金额,idCHN输出的中文大写金额 function TransformNumberIntoCHN(idNumber, ...
- PHP算法--将数字金额转换成大写金额
最近在看一些PHP算法题,遇到一个将数字金额转换成大写金额的小算法题,这里贴出自己的一个例子. 注:这个小算法适用于10万以内的金额. <?php //$num = 12345.67; func ...
- PHP 数字金额转换成中文大写金额的函数 数字转中文
/** *数字金额转换成中文大写金额的函数 *String Int $num 要转换的小写数字或小写字符串 *return 大写字母 *小数位为两位 **/ function num_to_rmb($ ...
- JS把数字金额转换成中文大写数字的函数
//把数字金额转换成中文大写数字的函数 function num2rmb ($num){ $c1="零壹贰叁肆伍陆柒捌玖"; $c2="分角元拾佰仟万拾佰仟亿" ...
- irport报表,把数字金额转换成大写人民币金额
1.编写oracle函数 CREATE OR REPLACE Function MoneyToChinese(Money In Number) Return Varchar2 Is strYuan ) ...
- PHP数字金额转换大写金额
早些年做CRM用到的一个金额转换函数,今天从旧项目中拿出来记录一下.金额转换的函数方法有很多,都很不错.不过这个是小崔刚工作的时候写的一个转换函数,多少还是有点纪念意义.如有问题请朋友们指出,小崔及时 ...
- c#金额转换成中文大写金额
2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> /// <param ...
- c#金额转换成中文大写金额 .Net开发Windows服务
c#金额转换成中文大写金额 2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> ...
随机推荐
- memcached学习——memcached的内存分配机制Slab Allocation、内存使用机制LRU、常用监控记录(四)
内存分配机制Slab Allocation 本文参考博客:https://my.oschina.net/bieber/blog/505458 Memcached的内存分配是以slabs为单位的,会根据 ...
- hdu 5641 King's Phone(暴力模拟题)
Problem Description In a military parade, the King sees lots of new things, including an Andriod Pho ...
- hdu 5036 Explosion(概率期望+bitset)
Problem Description Everyone knows Matt enjoys playing games very much. Now, he to N. Input The firs ...
- 盒子模型&position定位
有时候深深的感觉语文这门课程其实很有用, 至少以前学的时候没有感觉到 直到现在阅读大量的别人的资料文章的时候或者是看一些题目....... 总之:认真阅读小心品味 当然,前面的孤言自语和本文无关,只是 ...
- 无心插柳OR志在必得?阿里推“来往”的意图
近年来,阿里巴巴在外围的动作确实不少,投资新浪微博.投资陌陌,配合阿里自身的一些战略调整,让人觉得这家公司似乎正在经历一场前所未有的“蜕变”.其实这也不难理解,在BAT三国演义中,任何一方都不 ...
- mac下显示隐藏文件
一.在终端中 ls -a就可以查看隐藏文件. 显示和隐藏的命令例如以下: 显示:defaults write com.apple.finder AppleShowAllFiles -bool true ...
- Golang性能调优入门
如何利用golang自带的profile工具进行应用程序的性能调优,前一段时间我做的日志分析系统在线上遇到了一个问题,就是分任务的系统down机了,日志处理延迟了10几个小时,这个时候任务分发系统重启 ...
- 用phantomjs 进行网页整页截屏
写截取整个网页程序是一个做前台的哥们所托,要做一些漂亮的界面原形,参考一些不错的网站设计就帮他弄了个截屏的程序. phantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面 ...
- fullcalendar .net版本
实现了基本的增删改和拖拽,先记与此,抽时间继续优化和完善. 参考链接:http://www.helloweba.com/tag-fullcalendar.html 参考demo: http://f ...
- 高逼格的实现WiFi共享,不安装第三方wifi共享软件,两种方式实现开启wifi的功能
作为一枚程序员,不会点高逼格的doc命令,那么都有点感觉对不起自己的行业了,好了废话就到这里了 第一种方式: 首先使用cmd命令:window键+R 然后输入cmd回车 第一种方式: 第一步: 设 ...