数字转换成大写金额
来源:互联网 发布:洛杉矶级核潜艇数据 编辑:程序博客网 时间:2024/05/01 04:09
数字转换成大写金额
using System;
namespace NumToCap
{
/// <summary>
/// 类名:NumToCaps
/// 功能:将数字转换大写 如:101.01->壹佰零壹元零壹分
/// 限制:数字为万万亿以内,小数不超过两位
/// 用法:NumToCap cap=new NumToCap();
/// String s=cap.GetCaps(d);
/// 日期:2005-6-26
/// 作者:dqjia
/// 壹贰叁肆伍陆柒捌玖拾
///千百万亿
/// </summary>
public class NumToCaps
{
public NumToCaps()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
///<summary>
///将数定转换大写金额格式
///<param name= "d" > 参数必须小于万万亿,且不超过两位小数多过两位自动截取两位
///</param>
///<results>返回大写金额</results>
///</summary>
public string GetCaps(decimal d)
{
string s=d.ToString ("####.00");
bool isNeg=false;
string cap="";
if((d<1&&d>0)||(d<0&&d>-1)||d==0)
{
return this.ProcSpecNum (s);
}
if(d<0)
{
isNeg=true;
s=s.TrimStart ('-');
}
if(s.Length!=0&&s.Length <=19)
{
s=s.PadLeft (19,'0');
int i,j=0;
for(i=0;i<4;i++)
{
//处理万亿
if(i==1&&cap !="零"&&(s.Substring (j,4))=="0000")
{
cap+="亿";
}
cap+=this.GetIntCap (s.Substring (j,4),i.ToString ());
j+=4;
}
cap=this.ProcZero (cap);
cap+="元";
cap+=GetDecimalCap (s.Substring (17,2));
if(isNeg)
{
cap="负"+cap;
}
}
else
{
throw new Exception ("输入值超出范围!");
}
return cap;
}
/// <summary>
/// 处理特殊数字如小数和负小数,零.
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
private string ProcSpecNum(string num)
{
decimal dec=decimal.Parse (num);
if(dec==0)
{
return "零元";
}
if(dec<1&&dec>0)
{
return this.GetDecimalCap (num.Substring (num.IndexOf ('.')+1,2)).Trim ('零');
}
if(dec<0&&dec>-1)
{
return "负"+this.GetDecimalCap (num.Substring (num.IndexOf ('.')+1,2)).Trim ('零');
}
else
return "";
}
/// <summary>
/// 处理整数部分
/// </summary>
/// <param name="intPart">参数为四个数字为一组的字符串</param>
/// <param name="level">表示该字符串是万亿,亿,万等信息</param>
/// <returns>此字符串的大写</returns>
private string GetIntCap(string intPart,string level)
{
string cap="";
if(intPart!="0000")
{
int i;
string temp;
for(i=0;i<4;i++)
{
temp=this.GetOneNumCap (intPart.Substring (i,1));
if(temp!="零")
{
temp+=this.GetCapUnit (i.ToString ());
}
cap+=temp;
}
cap=cap.TrimEnd ('零');
cap+=this.GetLevel (level);
}
else
{
cap="零";
}
return cap;
}
/// <summary>
/// 取得小数部分的大写表示
/// </summary>
/// <param name="decimalPart"></param>
/// <returns></returns>
private string GetDecimalCap(string decimalPart)
{
string s="";
string temp;
if(decimalPart!="00")
{
temp=this.GetOneNumCap (decimalPart.Substring (0,1));
if(temp!="零")
{
s=temp+"角";
}
else
{
s=temp;
}
temp=this.GetOneNumCap (decimalPart.Substring (1,1));
if(temp!="零")
{
s=s+temp+"分";
}
}
else
{
s="整";
}
return s;
}
/// <summary>
/// 取得单个数字的大写
/// </summary>
/// <param name="oneNum"></param>
/// <returns></returns>
private string GetOneNumCap(string oneNum)
{
string capsNum="";
if(oneNum.Length==1)
{
switch(oneNum)
{
case "1":
capsNum="壹";
break;
case "2":
capsNum="贰";
break;
case "3":
capsNum="叁";
break;
case "4":
capsNum="肆";
break;
case "5":
capsNum="伍";
break;
case "6":
capsNum="陆";
break;
case "7":
capsNum="柒";
break;
case "8":
capsNum="捌";
break;
case "9":
capsNum="玖";
break;
case "0":
capsNum="零";
break;
default:
break;
}
}
return capsNum;
}
private string GetCapUnit(string unit)
{
string s="";
switch(unit)
{
case "0":
s="千";
break;
case "1":
s="百";
break;
case "2":
s="拾";
break;
default:
break;
}
return s;
}
private string GetLevel(string level)
{
string s="";
switch(level)
{
case "0":
s="万";
break;
case "1":
s="亿";
break;
case "2":
s="万";
break;
default:
break;
}
return s;
}
/// <summary>
/// 处理多个连续零的情况
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
private string ProcZero(string s)
{
s=s.Trim ('零');
do
{
s=s.Replace ("零零","零");
}
while(s.IndexOf ("零零")>0);
return s;
}
}
}
- 数字转换成大写金额
- 数字金额转换成大写
- 数字转换成大写金额
- 数字转换成大写金额
- 数字转换成大写金额
- 数字转换成大写金额
- 数字金额转换成大写金额
- 将数字金额转换成大写金额
- [python]数字金额转换成大写金额
- 数字金额转换大写
- 数字金额大写转换
- 数字金额大写转换
- 将数字转换成大写金额
- 讲金额(数字)转换成中文大写
- JavaScript金额数字转换成大写
- 使用 JAVA 将数字金额转换成大写中文金额
- PHP 数字金额转换成中文大写金额的函数
- java实现数字金额转换成汉字大写金额
- 系统启动时提示“ntldr is missing press any key to reboot”的处理
- 利用数组实现数据库记录的批量录入
- 求助!!!!!!!真的是万分不幸!!!!
- 第十八周总结
- 去除TCP/IP筛选
- 数字转换成大写金额
- 第一篇
- 故障恢复控制台命令全攻略
- 另类思路,利用tencent认证地址漏洞进行攻击。
- 系统启动故障恢复控制台应用实例
- 使用 php 5 时 MySQL 返回乱码的解决办法
- 入侵思路整理笔记
- 05/07/01
- 和别人不容易相处,是谁的错