小写金额转换为大写金额

前言

在很多地方都有用到将小写金额转换为大写金额,就是将类似1234.56转换为壹仟贰佰叁拾肆圆伍角陆分。

到底要怎样实现呢?其实只要仔细注意自己到底是怎么读的,细细揣摩一下。1 在千位:壹仟、2 在百位:贰佰......

所以有两个过程:

1.讲阿拉伯数字转换为大写数字。

2.在各位后面加上诸如:万、仟、佰、拾、圆、分、角。这里需要注意,比如壹仟圆,百位、十位及个位都是 0,总不能说壹仟零佰零拾零圆吧?

  还有,比如多少万多少圆,这里圆、万、亿、兆,这几个的不能丢的。

正文

/// <summary>
/// 小写金额转换为大写金额
/// </summary>
/// <param name="figures">小写金额</param>
/// <returns>大写金额</returns>
public string Figures2Words(decimal figures)
{
StringBuilder words
= new StringBuilder();
string cnNumber = "零壹贰叁肆伍陆柒捌玖";//大写
string cnUnit = "分角圆拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";//单位
string temp = Math.Round(figures + (decimal)0.001, 2).ToString().Replace(".", string.Empty);//精确到 2 位小数,并去掉 . 号
try
{
int length = temp.Length - 1;
if (length > 0 && length < 18)//处理仟兆以内
{
int j = 0;
int n = 0;
for (int i = 0; i <= length; i++)
{
j
= (int)temp[i] - 48;// 当前位转换为索引。0 在 ASCII中对应48,1 为 49,依次类推
n = i + 1 >= length ? (int)temp[length] - 48 : (int)temp[i + 1] - 48;//高一位转换为索引
if (j == 0)//当前位数字为 0
{
if (length - i == 2 || length - i == 6 || length - i == 10 || length - i == 14)//对应圆、万、亿、兆,(length - i - 2) % 4 == 0
{
words.Append(cnUnit[length
- i]);
}
else
{
if (n != 0)
{
words.Append(cnNumber[j]);
}
}
}
else//当前位数字不为 0
{
words.Append(cnNumber[j]);
//数字转换为大写
words.Append(cnUnit[length - i]);//其后加上货币单位
}
}
//words.Append("整");
}
else
{
words.Append(
"溢出");
}
}
catch
{
return string.Empty;
}
return words.ToString();
}
原文地址:https://www.cnblogs.com/ainijiutian/p/1733717.html