在线等问题!!! 选用什么方法来对应数字1-10输出人民币中的大写1-10最合适啊,或者说用什么数据结构最合适。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写两个对应的数组?str[0]=零。用的时候直接把数字为数组索引? 写两个对应的数组?str[0]=零。用的时候直接把数字为数组索引? C# 人民币大小写转换using System;namespace ExpertLib.ChineseSpecial{ #region RMBException // 人民币转换的错误 public class RMBException : System.Exception { public RMBException(string msg) : base(msg) { } } #endregion /// 实现将人民币的数字形式转换为中文格式,最大支持9兆兆。 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 #region Convert #region Convert <decimal> // 转换成人民币大写形式 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 #region Convert <double> // 转换成人民币大写形式 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 #region Convert <float> // 转换成人民币大写形式 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 #region Convert <int> // 转换成人民币大写形式 public static string Convert(int number) { decimal dec; dec = System.Convert.ToDecimal(number); return Convert(dec); } #endregion #region Convert <long> // 转换成人民币大写形式 public static string Convert(long number) { decimal dec; dec = System.Convert.ToDecimal(number); return Convert(dec); } #endregion #region Convert <string> // 转换成人民币大写形式 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 #region MaxSupportNumber // 支持的最大转换数 public static decimal MaxSupportNumber { get { return MaxNumber; } } #endregion #region MinSupportNumber // 支持的最小数 public static decimal MinSupportNumber { get { return MinNumber; } } #endregion #region 内部函数 #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 #region ConvertDecimal // 小数部分的处理 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 #region GetUnit // 获取人民币中文形式的对应位置的单位标志 private static string GetUnit(int n) { return RMBUnitChar[n].ToString(); } #endregion #region DigToCC // 数字转换为相应的中文字符 ( Digital To Chinese Char ) private static string DigToCC(char c) { return RMBUppercase[c - '0'].ToString(); } #endregion #region CheckNumberLimit private static void CheckNumberLimit(decimal number) { if ((number < MinNumber) || (number > MaxNumber)) { throw new RMBException("超出可转换的范围"); } } #endregion #region CombinUnit // 合并兆亿万词 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 }} 问下上楼的dictionary怎么用啊?能不能举个例啊?谢谢 http://hi.baidu.com/yanshuangfeng8/blog/item/12acbfefe9f9033eacafd59e.html 1,2,...,100 算出所有数值加起来=300的不重复组合!!! C#怎么通过操作命令符操作热敏打印机啊,热敏打印机用的是并口,茫然啊 新手求助 关于类中 控件拖动问题.. log4net写数据库问题 sql 一对多查询 救急!!~~ 如何从string中取得指定位置的字符? 文本内容排序问题 谁有C#的DataGrid经典例子!!! SqlDataAdapter在Fill时报错!!! 已经有一个项目做好了 dataGridView 排序 如何检索SQL Server Images字段内容
{
#region RMBException
// 人民币转换的错误
public class RMBException : System.Exception
{
public RMBException(string msg)
: base(msg)
{
}
}
#endregion /// 实现将人民币的数字形式转换为中文格式,最大支持9兆兆。
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 #region Convert
#region Convert <decimal>
// 转换成人民币大写形式
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 #region Convert <double>
// 转换成人民币大写形式
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 #region Convert <float>
// 转换成人民币大写形式
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 #region Convert <int>
// 转换成人民币大写形式
public static string Convert(int number)
{
decimal dec;
dec = System.Convert.ToDecimal(number);
return Convert(dec);
}
#endregion #region Convert <long>
// 转换成人民币大写形式
public static string Convert(long number)
{
decimal dec;
dec = System.Convert.ToDecimal(number);
return Convert(dec);
}
#endregion #region Convert <string>
// 转换成人民币大写形式
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 #region MaxSupportNumber
// 支持的最大转换数
public static decimal MaxSupportNumber
{
get
{
return MaxNumber;
}
}
#endregion #region MinSupportNumber
// 支持的最小数
public static decimal MinSupportNumber
{
get
{
return MinNumber;
}
}
#endregion #region 内部函数
#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 #region ConvertDecimal
// 小数部分的处理
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 #region GetUnit
// 获取人民币中文形式的对应位置的单位标志
private static string GetUnit(int n)
{
return RMBUnitChar[n].ToString();
}
#endregion #region DigToCC
// 数字转换为相应的中文字符 ( Digital To Chinese Char )
private static string DigToCC(char c)
{
return RMBUppercase[c - '0'].ToString();
}
#endregion #region CheckNumberLimit
private static void CheckNumberLimit(decimal number)
{
if ((number < MinNumber) || (number > MaxNumber))
{
throw new RMBException("超出可转换的范围");
}
}
#endregion #region CombinUnit
// 合并兆亿万词
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
}
}