如题!!
解决方案 »
- 输入5个学生的信息,按成绩排序,程序虽然做出来了,但不完美!求改进!另外求n个学生排序该怎么写
- windows Media Player的那些事、
- WPF 显示gif动态图片
- 列表
- ora-02041: 客户端数据库未开始一个事务处理
- 如何设置和访问app.config文件啊?高手请帮忙.
- 100分求c#事务处理的数据访问层的封装类
- VS2010 按钮实现 生成C++格式的 dll
- session传数组问题
- (Exception from HRESULT: 0x80131040) 错误,服务器上有,本机没有
- Sql Select case的用法
- C#中调用WindowsXP SP2下提供的防火墙设置组件的函数
呵呵~
源码如下:请参考using System;namespace ExpertLib.ChineseSpecial
{
RMBException#region RMBException
/**//// <summary>
/// 人民币转换的错误
/// </summary>
public class RMBException : System.Exception
{
public RMBException(string msg)
: base(msg)
{
}
}
#endregion /**//// <summary>
/// 实现将人民币的数字形式转换为中文格式,最大支持9兆兆。
/// </summary>
public static class RMB
{
内部常量#region 内部常量
private static string RMBUppercase = "零壹贰叁肆伍陆柒捌玖";
private static string RMBUnitChar = "元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟万拾佰仟亿拾佰仟兆"; //人民币整数位对应的标志
private const decimal MaxNumber =9999999999999999999999999.99m;
private const decimal MinNumber = -9999999999999999999999999.99m;
private static char[] cDelim = { '.' }; //小数分隔标识
#endregion Convert#region Convert
Convert #region Convert <decimal>
/**//// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="digital"></param>
/// <returns></returns>
public static string Convert(decimal number)
{
bool NegativeFlag=false;
decimal RMBNumber; CheckNumberLimit(number); RMBNumber = Math.Round(number, 2); //将四舍五入取2位小数
if (RMBNumber == 0)
{
return "零元整";
}
else if(RMBNumber < 0) //如果是负数
{
NegativeFlag = true;
RMBNumber = Math.Abs(RMBNumber); //取绝对值
}
else
{
NegativeFlag = false;
} string buf = ""; // 存放返回结果
string strDecPart = ""; // 存放小数部分的处理结果
string strIntPart = ""; // 存放整数部分的处理结果
string[] tmp = null;
string strDigital = RMBNumber.ToString();
tmp = strDigital.Split(cDelim, 2); // 将数据分为整数和小数部分
if (RMBNumber >= 1m) // 大于1时才需要进行整数部分的转换
{
strIntPart = ConvertInt(tmp[0]);
} if (tmp.Length > 1) //分解出了小数
{
strDecPart = ConvertDecimal(tmp[1]);
}
else //没有小数肯定是为整
{
strDecPart = "整";
}
if (NegativeFlag==false) //是否负数
{
buf = strIntPart + strDecPart;
}
else
{
buf = "负"+strIntPart + strDecPart;
}
return buf;
}
#endregion Convert #region Convert <double>
/**//// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(double number)
{
decimal dec;
try
{
dec = System.Convert.ToDecimal(number);
}
catch
{
throw new RMBException("不能转成标准的decimal类型:" + number.ToString());
}
return Convert(dec);
}
#endregion Convert #region Convert <float>
/**//// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(float number)
{
decimal dec;
try
{
dec = System.Convert.ToDecimal(number);
}
catch
{
throw new RMBException("不能转成标准的decimal类型:" + number.ToString());
}
return Convert(dec);
}
#endregion Convert #region Convert <int>
/**//// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(int number)
{
decimal dec;
dec = System.Convert.ToDecimal(number);
return Convert(dec);
}
#endregion Convert #region Convert <long>
/**//// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(long number)
{
decimal dec;
dec = System.Convert.ToDecimal(number);
return Convert(dec);
}
#endregion Convert #region Convert <string>
/**//// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(string number)
{
decimal dec;
try
{
dec = System.Convert.ToDecimal(number,null);
}
catch
{
throw new RMBException("不能转成标准的decimal类型:" + number);
}
return Convert(dec);
}
#endregion
#endregion MaxSupportNumber#region MaxSupportNumber
/**//// <summary>
/// 支持的最大转换数
/// </summary>
public static decimal MaxSupportNumber
{
get
{
return MaxNumber;
}
}
#endregion MinSupportNumber#region MinSupportNumber
/**//// <summary>
/// 支持的最小数
/// </summary>
public static decimal MinSupportNumber
{
get
{
return MinNumber;
}
}
#endregion
ConvertInt#region ConvertInt
private static string ConvertInt(string intPart)
{
string buf = "";
int length = intPart.Length;
int curUnit = length;
// 处理除个位以上的数据
string tmpValue = ""; // 记录当前数值的中文形式
string tmpUnit = ""; // 记录当前数值对应的中文单位
int i;
for (i = 0; i < length - 1; i++, curUnit--)
{
if (intPart[i] != '0')
{
tmpValue = DigToCC(intPart[i]);
tmpUnit = GetUnit(curUnit - 1);
}
else
{
// 如果当前的单位是"万、亿",则需要把它记录下来
if ((curUnit - 1) % 4 == 0)
{
tmpValue = "";
tmpUnit = GetUnit(curUnit - 1);//
}
else
{
tmpUnit = "";
// 如果当前位是零,则需要判断它的下一位是否为零,再确定是否记录'零'
if (intPart[i + 1] != '0')
{
tmpValue = "零";
}
else
{
tmpValue = "";
}
}
}
buf += tmpValue + tmpUnit;
}
// 处理个位数据
if (intPart[i] != '0')
buf += DigToCC(intPart[i]);
buf += "元"; return CombinUnit(buf);
}
#endregion ConvertDecimal#region ConvertDecimal
/**//// <summary>
/// 小数部分的处理
/// </summary>
/// <param name="decPart">需要处理的小数部分</param>
/// <returns></returns>
private static string ConvertDecimal(string decPart)
{
string buf = "";
int i = decPart.Length; //如果小数点后均为零
if ((decPart == "0") || (decPart == "00"))
{
return "整";
} if (decPart.Length > 1) //2位
{
if (decPart[0] == '0') //如果角位为零0.01
{
buf = DigToCC(decPart[1]) + "分"; //此时不可能分位为零
}
else if (decPart[1] == '0')
{
buf = DigToCC(decPart[0]) + "角整";
}
else
{
buf = DigToCC(decPart[0]) + "角";
buf += DigToCC(decPart[1]) + "分";
}
}
else //1位
{
buf += DigToCC(decPart[0]) + "角整";
}
return buf;
}
#endregion GetUnit#region GetUnit
/**//// <summary>
/// 获取人民币中文形式的对应位置的单位标志
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
private static string GetUnit(int n)
{
return RMBUnitChar[n].ToString();
}
#endregion DigToCC#region DigToCC
/**//// <summary>
/// 数字转换为相应的中文字符 ( Digital To Chinese Char )
/// </summary>
/// <param name="c">以字符形式存储的数字</param>
/// <returns></returns>
private static string DigToCC(char c)
{
return RMBUppercase[c - '0'].ToString();
}
#endregion CheckNumberLimit#region CheckNumberLimit
private static void CheckNumberLimit(decimal number)
{
if ((number < MinNumber) || (number > MaxNumber))
{
throw new RMBException("超出可转换的范围");
}
}
#endregion CombinUnit#region CombinUnit
/**//// <summary>
/// 合并兆亿万词
/// </summary>
/// <param name="rmb"></param>
/// <returns></returns>
private static string CombinUnit(string rmb)
{
if (rmb.Contains("兆亿万"))
{
return rmb.Replace("兆亿万", "兆");
}
if (rmb.Contains("亿万"))
{
return rmb.Replace("亿万", "亿");
}
if (rmb.Contains("兆亿"))
{
return rmb.Replace("兆亿", "兆");
}
return rmb;
}
#endregion
#endregion
}
}
http://www.cnblogs.com/esshs/archive/2005/03/30/128318.html
是合会法的。(我常用这个,也用得很放心)
using System;
namespace Test
{
/**//// <summary>
/// Rmb 的摘要说明。
/// </summary>
public class Rmb
{
/**//// <summary>
/// 转换人民币大小金额
/// </summary>
/// <param name="num">金额</param>
/// <returns>返回大写形式</returns>
public static string CmycurD(decimal num)
{
string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字
string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字
string str3 = ""; //从原num值中取出的值
string str4 = ""; //数字的字符串形式
string str5 = ""; //人民币大写金额形式
int i; //循环变量
int j; //num的值乘以100的字符串长度
string ch1 = ""; //数字的汉语读法
string ch2 = ""; //数字位的汉字读法
int nzero = 0; //用来计算连续的零值是几个
int temp; //从原num值中取出的值
num = Math.Round(Math.Abs(num),2); //将num取绝对值并四舍五入取2位小数
str4 = ((long)(num*100)).ToString(); //将num乘100并转换成字符串形式
j = str4.Length; //找出最高位
if (j > 15){return "溢出";}
str2 = str2.Substring(15-j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
//循环取出每一位需要转换的值
for(i=0;i<j;i++)
{
str3 = str4.Substring(i,1); //取出需转换的某一位的值
temp = Convert.ToInt32(str3); //转换为数字
if (i != (j-3) && i != (j-7) && i != (j-11) && i != (j-15))
{
//当所取位数不为元、万、亿、万亿上的数字时
if (str3 == "0")
{
ch1 = "";
ch2 = "";
nzero = nzero + 1;
}
else
{
if(str3 != "0" && nzero != 0)
{
ch1 = "零" + str1.Substring(temp*1,1);
ch2 = str2.Substring(i,1);
nzero = 0;
}
else
{
ch1 = str1.Substring(temp*1,1);
ch2 = str2.Substring(i,1);
nzero = 0;
}
}
}
else
{
//该位是万亿,亿,万,元位等关键位
if (str3 != "0" && nzero != 0)
{
ch1 = "零" + str1.Substring(temp*1,1);
ch2 = str2.Substring(i,1);
nzero = 0;
}
else
{
if (str3 != "0" && nzero == 0)
{
ch1 = str1.Substring(temp*1,1);
ch2 = str2.Substring(i,1);
nzero = 0;
}
else
{
if (str3 == "0" && nzero >= 3)
{
ch1 = "";
ch2 = "";
nzero = nzero + 1;
}
else
{
if (j >= 11)
{
ch1 = "";
nzero = nzero + 1;
}
else
{
ch1 = "";
ch2 = str2.Substring(i,1);
nzero = nzero + 1;
}
}
}
}
}
if (i == (j-11) || i == (j-3))
{
//如果该位是亿位或元位,则必须写上
ch2 = str2.Substring(i,1);
}
str5 = str5 + ch1 + ch2;
if (i == j-1 && str3 == "0" )
{
//最后一位(分)为0时,加上“整”
str5 = str5 + '整';
}
}
if (num == 0)
{
str5 = "零元整";
}
return str5;
}
/**//// <summary>
/// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num)
/// </summary>
/// <param name="num">用户输入的金额,字符串形式未转成decimal</param>
/// <returns></returns>
public static string CmycurD(string numstr)
{
try
{
decimal num = Convert.ToDecimal(numstr);
return CmycurD(num);
}
catch
{
return "非数字形式!";
}
}
}
}
{
string stringchn = "零壹贰叁肆伍陆柒捌玖";
string stringnum = "0123456789";
string[] stringArrayLevelName = new string[11] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰" };
string ss = System.Convert.ToString(digit).Trim();
string num = "";
int i;
for (i = ss.Length - 1; i >= 0; i--)
{
if (ss[i] == '0')
{
if (ss.Length - 1 - i == 4)
{
num = "万" + num;
}
else
{
if (ss.Length - 1 - i == 8)
{
num = "亿" + num;
}
else
{
num = "零" + num; }
}
}
else
{
num = stringchn[stringnum.IndexOf(ss[i])] + stringArrayLevelName[ss.Length - 1 - i] + num;
}
}
while ((i = num.IndexOf("零零")) != -1)
num = num.Remove(i, 1); while (num[num.Length - 1] == '零' && num.Length > 1)
num = num.Remove(num.Length - 1, 1);
if ((i = num.IndexOf("零万")) != -1)
num = num.Remove(i, 1);
if ((i = num.IndexOf("亿万")) != -1)
num = num.Remove(i + 1, 1);
if ((i = num.IndexOf("零亿")) != -1)
num = num.Remove(i, 1);
return num; }