private float getMoney(string strBig)
{
string strExp="";
string[] arrBig = new string[] { "整","","零","+0","壹","+1","贰","+2","叁","+3","肆","+4","伍","+5","陆","+6","柒","+7","捌","+8","玖","+9", "分","*0.01","角","*0.1","元","*1","拾","*10.00","佰","*100.00","仟","*1000.00","万","*10000.00","亿","*100000000.00"};
for (int i = 0; i < strBig.Length; i++)
{
for (int j = 0; j < arrBig.Length-1;j+=2 )
{
if (arrBig[j] == strBig[i].ToString())
{
strExp += arrBig[j + 1].ToString();
continue;
}
}
} object ret=new DataTable().Compute(strExp, "");
return float.Parse(ret.ToString());
//Console.WriteLine(getMoney("玖仟零贰拾壹元陆角肆分"));
//Console.WriteLine(getMoney("玖仟万亿零贰拾壹元陆角肆分"));
}
{
string strExp="";
string[] arrBig = new string[] { "整","","零","+0","壹","+1","贰","+2","叁","+3","肆","+4","伍","+5","陆","+6","柒","+7","捌","+8","玖","+9", "分","*0.01","角","*0.1","元","*1","拾","*10.00","佰","*100.00","仟","*1000.00","万","*10000.00","亿","*100000000.00"};
for (int i = 0; i < strBig.Length; i++)
{
for (int j = 0; j < arrBig.Length-1;j+=2 )
{
if (arrBig[j] == strBig[i].ToString())
{
strExp += arrBig[j + 1].ToString();
continue;
}
}
} object ret=new DataTable().Compute(strExp, "");
return float.Parse(ret.ToString());
//Console.WriteLine(getMoney("玖仟零贰拾壹元陆角肆分"));
//Console.WriteLine(getMoney("玖仟万亿零贰拾壹元陆角肆分"));
}
解决方案 »
- wpf中tabitem无法充满tabcontrol
- 简单问题寻求帮助!!!
- 求一个思路或例子--工序流程的表示
- 请求帮助,希望有人帮忙修改下代码,看看问题出在哪里,这是一个实现拼音过滤功能的自定义ComboBox
- C# linklabel在windows窗体下链接文件夹????
- 〓〓〓 动态增加页面控件问题 〓〓〓
- 一个比较怪的想法,大家看是否可行.
- 怎么让自己的程序写到注册表里的自启动里,以后每次开机,程序都会自动启动??
- c#中如何定义热键,即无论何时按下热键就可以接收到消息
- 多线程操作控件比如说 操作richtextbox---十万火急,谢谢
- 如何将数据集中的记录赋值给变量
- RegisterStartupScript 中如何 触发 return confirm 这个JS
public static Decimal GetDecimal(object sNum)
{
return GetDecimal(sNum, 0);
}
public static Decimal GetDecimal(object sNum, Decimal iDefault)
{
return GetDecimal(sNum, 0, -1);
}
public static Decimal GetDecimal(object sNum, Decimal iDefault, int iDotNum)
{
try
{
Decimal d = Convert.ToDecimal(sNum);
if (iDotNum == -1)
{
string s = d.ToString();
for (int i = s.Length - 1; i >= 0; i--)
{
if (s.IndexOf('.') > -1 && (s[i] == '0' || s[i] == '.'))
{
s = s.Substring(0, s.Length - 1);
}
else
{
break;
}
}
d = Convert.ToDecimal(s);
return d;
}
else
{
return Math.Round(d, iDotNum);
}
public static Decimal GetDecimal(object sNum)
{
return GetDecimal(sNum, 0);
}
public static Decimal GetDecimal(object sNum, Decimal iDefault)
{
return GetDecimal(sNum, 0, -1);
}
public static Decimal GetDecimal(object sNum, Decimal iDefault, int iDotNum)
{
try
{
Decimal d = Convert.ToDecimal(sNum);
if (iDotNum == -1)
{
string s = d.ToString();
for (int i = s.Length - 1; i >= 0; i--)
{
if (s.IndexOf('.') > -1 && (s[i] == '0' || s[i] == '.'))
{
s = s.Substring(0, s.Length - 1);
}
else
{
break;
}
}
d = Convert.ToDecimal(s);
return d;
}
else
{
return Math.Round(d, iDotNum);
}
private static string UpperMoney(string sNum, string[] sUpperNum, string[] upperUnit)
{
return UpperMoney(sNum, sUpperNum, upperUnit, false);
}
private static string UpperMoney(string sNum, string[] sUpperNum, string[] upperUnit,bool b)
{
char[] cNums = sNum.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < sNum.Length; i++)
{
int iNum = int.Parse(cNums[i].ToString());
string unit = string.Empty;
if (iNum != 0)
{
if (b)
unit = upperUnit[i];
else
unit = upperUnit[sNum.Length - i - 1];
}
else if (AddUnitAtZero(sNum.Length - i))
{
if (!b)
unit = upperUnit[sNum.Length - i - 1];
}
sb.Append(sUpperNum[iNum] + unit);
}
return ReplaceInvalid(sb.ToString());
}
private static bool AddUnitAtZero(int index)
{
for (int i = 0; i < 8; i++)
{
if (index == 4 * i + 1) return true;
}
return false;
}
private static string ReplaceInvalid(string sNum)
{
while (sNum.LastIndexOf("零零") != -1 || sNum.LastIndexOf("零元") != -1|| sNum.LastIndexOf("零萬") != -1|| sNum.LastIndexOf("零億") != -1
|| sNum.LastIndexOf("零兆") != -1|| sNum.LastIndexOf("億萬") != -1 || sNum.LastIndexOf("兆萬億") != -1 ||sNum.LastIndexOf("京億兆")!=-1)
{
sNum = sNum.Replace("零零", "零").Replace("零元", "元").Replace("零萬", "萬").Replace("零億", "億");
sNum = sNum.Replace("零兆", "兆").Replace("億萬", "億").Replace("兆萬億", "兆").Replace("京億兆", "京");
}
return sNum + "整" == "元整" ? "零元整" : sNum + "整";
}
public double DecodeMoneyCn(string AText)
{
AText = AText.Replace("万万", "亿");
AText = AText.Replace("点", "元");
AText = AText.Replace("块", "元");
AText = AText.Replace("毛", "角");
double vResult = 0;
double vNumber = 0; // 当前数字
double vTemp = 0;
int vDecimal = 0; // 是否出现小数点
foreach (char vChar in AText)
{
int i = "零一二三四五六七八九".IndexOf(vChar);
if (i < 0) i = "零幺两三四五六七八九".IndexOf(vChar);
if (i < 0) i = "零壹贰叁肆伍陆柒捌玖".IndexOf(vChar);
if (i > 0)
{
vNumber = i;
if (vDecimal > 0)
{
vResult += vNumber * Math.Pow(10, -vDecimal);
vDecimal++;
vNumber = 0;
}
}
else
{
i = "元十百千万亿".IndexOf(vChar);
if (i < 0) i = "整拾佰仟万亿".IndexOf(vChar);
if (i == 5) i = 8;
if (i > 0)
{
if (i >= 4)
{
vTemp += vNumber;
if (vTemp == 0) vTemp = 1;
vResult += vTemp * Math.Pow(10, i);
vTemp = 0;
}
else vTemp += vNumber * Math.Pow(10, i);
}
else
{
i = "元角分".IndexOf(vChar);
if (i > 0)
{
vTemp += vNumber;
vResult += vTemp * Math.Pow(10, -i);
vTemp = 0;
}
else if (i == 0)
{
vTemp += vNumber;
vResult += vTemp;
vDecimal = 1;
vTemp = 0;
}
}
vNumber = 0;
}
}
return vResult + vTemp + vNumber;
}private void button2_Click(object sender, EventArgs e)
{
string[] vTestText = {
"十二点五六",
"一亿零一万零五",
"四万万",
"九十八亿七千六百五十四万三千二百一十",
"五元一角四分", "壹佰元整",
"三千五百万",
"九块二毛"};
foreach (string vText in vTestText)
{
Console.WriteLine("DecodeMoneyCn(\"{0}\")={1}", vText,
DecodeMoneyCn(vText));
}
}
部分测试结果如下
[code=BatchFile]DecodeMoneyCn("十二点五六")=2.56
DecodeMoneyCn("一亿零一万零五")=100010005
DecodeMoneyCn("四万万")=400000000
DecodeMoneyCn("九十八亿七千六百五十四万三千二百一十")=9876543210
DecodeMoneyCn("五元一角四分")=5.14
DecodeMoneyCn("壹佰元整")=100
DecodeMoneyCn("三千五百万")=35000000
DecodeMoneyCn("九块二毛")=9.2[/code]