小写金额转换为大写金额

前言

在很多地方都有用到将小写金额转换为大写金额,就是将类似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/archive/2010/05/12/1733717.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值