1.调用 ConvertIntToUppercaseAmount(String value) 即可
<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 string ConvertIntToUppercaseAmount(string capValue)
{
string currCap = ""; //当前金额
string capResult = ""; //结果金额
string currentUnit = "";//当前单位
string resultUnit = ""; //结果单位
int prevChar = -1; //上一位的值
int currChar = 0; //当前位的值
int posIndex = 4; //位置索引,从"元"开始
if (Convert.ToDouble(capValue) == 0) return "";
for (int i = capValue.Length - 1; i >= 0; i--)
{
currChar = Convert.ToInt16(capValue.Substring(i, 1));
if (posIndex > 30)
{
//已超出最大精度"垓"。注:可以将30改成22,使之精确到兆亿就足够了
break;
}
else if (currChar != 0)
{
//当前位为非零值,则直接转换成大写金额
currCap = DXSZ.Substring(currChar, 1) + DXDW.Substring(posIndex, 1);
}
else
{
//防止转换后出现多余的零,例如:3000020
switch (posIndex)
{
case 4: currCap = "元"; break;
case 8: currCap = "萬"; break;
case 12: currCap = "亿"; break;
case 17: currCap = "兆"; break;
case 23: currCap = "京"; break;
case 30: currCap = "垓"; break;
default: break;
}
if (prevChar != 0 )
{
if (currCap != "")
{
if (currCap != "元") currCap += "零";
}
else
{
currCap = "零";
}
}
}
//对结果进行容错处理
if(capResult.Length > 0)
{
resultUnit = capResult.Substring(0,1);
currentUnit = DXDW.Substring(posIndex, 1);
if (SCDW.IndexOf(resultUnit) > 0)
{
if (SCDW.IndexOf(currentUnit) > SCDW.IndexOf(resultUnit))
{
capResult = capResult.Substring(1);
}
}
}
capResult = currCap + capResult;
prevChar = currChar;
posIndex += 1;
currCap = "";
}
return capResult;
}
/// <summary>
/// 转换小数为大写金额
/// </summary>
/// <param name="capValue">小数值</param>
/// <param name="addZero">是否增加零位</param>
/// <returns>返回大写金额</returns>
private string ConvertDecToUppercaseAmount(string capValue, bool addZero)
{
string currCap = "";
string capResult = "";
int prevChar = addZero ? -1 : 0;
int currChar = 0;
int posIndex = 3;
if (Convert.ToInt16(capValue) == 0) return "";
for (int i = 0; i < capValue.Length; i++)
{
currChar = Convert.ToInt16(capValue.Substring(i, 1));
if (currChar != 0)
{
currCap = DXSZ.Substring(currChar, 1) + DXDW.Substring(posIndex, 1);
}
else
{
if (Convert.ToInt16(capValue.Substring(i)) == 0)
{
break;
}
else if (prevChar != 0)
{
currCap = "零";
}
}
capResult += currCap ;
prevChar = currChar;
posIndex -= 1;
currCap = "";
}
return capResult;
}
/// <summary>
/// 人民币大写金额
/// </summary>
/// <param name="value">人民币数字金额值</param>
/// <returns>返回人民币大写金额</returns>
public string RMBAmount(double value)
{
string capResult ="";
string capValue = string.Format("{0:f4}", value); //格式化
int dotPos = capValue.IndexOf("."); //小数点位置
bool addInt = (Convert.ToInt32(capValue.Substring(dotPos+1)) == 0);//是否在结果中加"整"
bool addMinus = (capValue.Substring(0, 1) == "-"); //是否在结果中加"负"
int beginPos = addMinus ? 1 : 0; //开始位置
string capInt = capValue.Substring(beginPos, dotPos); //整数
string capDec = capValue.Substring(dotPos + 1); //小数
if (dotPos > 0)
{
capResult = ConvertIntToUppercaseAmount(capInt) +
ConvertDecToUppercaseAmount(capDec, Convert.ToDouble(capInt) != 0 ? true : false);
}
else
{
capResult = ConvertIntToUppercaseAmount(capDec);
}
if (addMinus) capResult = "负" + capResult;
if (addInt) capResult += "整";
return capResult;
}
}
C#人民币大小写金额转换(C#版本)相关推荐
- 人民币大小写金额转换
1.调用 ConvertIntToUppercaseAmount(String value) 即可 <summary> ///人民币大小写金额转换 ///</su ...
- 应用Excel实现大小写金额转换
在基本建设审计中,经常需要同时写明审定工程造价的大小写金额,如2942635.44元写为"贰佰玖拾肆万贰仟陆佰叁拾伍元肆角肆分",388372.80元写为"叁拾捌万捌仟叁 ...
- 人民币大小写格式转换
using System; using System.Text; using System.Text.RegularExpressions; /// <summary> /// 人民币大小 ...
- 工具篇——MoneyFormatUtil(用于将人民币小写金额转换成大写金额)
写代码的四点: 1.明确需求.要做什么? 2.分析思路.要怎么做?(1,2,3--) 3.确定步骤.每一个思路要用到哪些语句.方法和对象. 4.代码实现.用具体的语言代码将思路实现出来. 学习新技术的 ...
- 大小写金额转换(电子表格大小写金额转换)
excel金额大小写怎么转换?1.比如输入,得出伍万肆仟柒佰叁? 若输入数据在A1单元格内,则公式如下: =IF(LEN(A1)=1,"零元零"&TEXT(A1," ...
- c大小写转换函数_Excel中的大小写金额转换,技巧法和函数法,职场必学技巧
财务工作中,经常需要将小写的数字,转换成大写的数字,有两种方法轻松解决,技巧法以及函数法. 小写转大写技巧法 我们选中单元格,然后右键,设置单元格格式(快捷键是CTRL+1),在弹出的设置单元格格式窗 ...
- 巧用Excel 轻松转换人民币大小写
巧用Excel 轻松转换人民币大小写 2010-02-08 11:22 要将人民币小写金额转换成大写格式,用Excel提供的格式,将自定义格式类型中的"[dbnum2]G/通用格 ...
- java人民币大小写转换_人民币大小写转换
usingSystem;usingSystem.Text;usingSystem.Text.R using System; using System.Text; using System.Text.R ...
- python数字大小写转换代码_用python实现把数字人民币金额转换成大写的脚本程序...
# -*- coding: utf-8 -*- def Num2MoneyFormat( change_number ): """ .转换数字为大写货币格式( forma ...
最新文章
- 干货|浅谈强化学习的方法及学习路线
- 智能车竞赛技术报告 | 全向行进组 - 沈阳工业大学 - 找不到北队
- Hello World on Impala
- P1332,nssl1316-血色先锋军【bfs】
- 无线网络技术基础 01
- IE6 CSS bug: position:relative元素被overflow:auto/scroll元素包含
- torch中loss.bacword的理解
- SVN提示: File or directory '*' is out of date; try updating 解决方案 .
- php操作mysql工具类_PHP操作数据库的工具类
- r语言和metawin_Meta分析系列之二_Meta分析的软件
- mysql 取汉字笔划数_PHP获取汉字笔画数功能【测试可用】
- html5 调用pc摄像头,H5调用PC端摄像头上传图片
- 串口连接交换机,进行交互
- vc c语言标准库头文件,VC++ 6.0中添加库文件和头文件
- install diagnostic_updater
- Oracle SQL开发考试试题
- 神舟战神 Z8 2022款评测
- 全量发布与灰度发布(APP版本发布)
- [已迁移]pwn-House of Orange+FSOP
- wordpress后台管理(七)说说管理:所有说说、发表说说
热门文章
- 地图--WGS84 高德坐标 百度坐标的相互转换(好用推荐)
- Google Colab V100 +TensorFlow1.15.2 性能测试
- Java模拟消息队列
- vue使用百度地图获取位置信息
- 洛谷题解——P1873:砍树
- C++ 类中的static成员的使用及单例设计示例
- 欲登千层楼,又何惧寒风
- 记录一下3dmax--substancePainter-unity烘焙法线详细过程
- python openpyxl模块 合并单元格,设置行高,列宽,边框,居中,字体样式
- 怎么识别图片中的文字?这三款识别软件还不错