网上相关资料都是将数字金额转换为大写金额的代码,因为需要所以自己实现了将大写格式转为数字金额 格式,有相同需要的可以参考了
/// <summary>
/// 将人民币大写金额转换为数字金额
/// </summary>
public class RMBConversion
{
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private static decimal ToLowerCaseFunction(string value)
{
List<string> list = new List<string>();
if (value.Contains("仟"))
{
var arr1 = Regex.Split(value, @"仟", RegexOptions.IgnoreCase);
if (arr1 != null && arr1.Length > 0)
{
list.Add(arr1[0] + "000");
}
if(arr1.Length > 1)
{
value = arr1[1];
if(value.Contains("佰"))
{
var arr2 = Regex.Split(value, @"佰", RegexOptions.IgnoreCase);
if (arr2 != null && arr2.Length > 0)
{
list.Add(arr2[0] + "00");
}
if (arr2.Length > 1)
{
value = arr2[1];
if (value.Contains("拾"))
{
var arr3 = Regex.Split(value, @"拾", RegexOptions.IgnoreCase);
if (arr3 != null && arr3.Length > 0)
{
list.Add(arr3[0] + "0");
}
if (arr3.Length > 1)
{
list.Add(arr3[1]);
}
}
else //不含拾 拾
{
list.Add(value);
}
}
}
else //不含佰的情况
{
if(value.Contains("拾"))
{
var arr3 = Regex.Split(value, @"拾", RegexOptions.IgnoreCase);
if (arr3 != null && arr3.Length > 0)
{
list.Add(arr3[0] + "0");
}
if (arr3.Length > 1)
{
list.Add(arr3[1]);
}
}
else //不含拾 拾
{
list.Add(value);
}
}
}
}
else //不含仟的情况
{
if(value.Contains("佰"))
{
var arr2 = Regex.Split(value, @"佰", RegexOptions.IgnoreCase);
if (arr2 != null && arr2.Length > 0)
{
list.Add(arr2[0] + "00");
}
if (arr2.Length > 1)
{
value = arr2[1];
if (value.Contains("拾"))
{
var arr3 = Regex.Split(value, @"拾", RegexOptions.IgnoreCase);
if (arr3 != null && arr3.Length > 0)
{
list.Add(arr3[0] + "0");
}
if (arr3.Length > 1)
{
list.Add(arr3[1]);
}
}
else //不含拾
{
list.Add(value);
}
}
}
else //不含佰的情况
{
if(value.Contains("拾"))
{
var arr3 = Regex.Split(value, @"拾", RegexOptions.IgnoreCase);
if (arr3 != null && arr3.Length > 0)
{
list.Add(arr3[0] + "0");
}
if (arr3.Length > 1)
{
list.Add(arr3[1]);
}
}
else //不含拾
{
list.Add(value);
}
}
}
decimal result = 0;
if(list != null && list.Count > 0)
{
foreach (var item in list)
{
decimal number = 0;
if (decimal.TryParse(item, out number))
{
result += number;
}
}
}
return result;
}
/// <summary>
/// 将人民币金额转为数字格式
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static decimal ToLowerCase(string str)
{
NameValueCollection filterList = new NameValueCollection();
filterList.Add("零", "0");
filterList.Add("壹", "1");
filterList.Add("贰", "2");
filterList.Add("叁", "3");
filterList.Add("肆", "4");
filterList.Add("伍", "5");
filterList.Add("五", "5");
filterList.Add("陆", "6");
filterList.Add("柒", "7");
filterList.Add("捌", "8");
filterList.Add("玖", "9");
filterList.Add("元", "圆");
filterList.Add("正", "整");
filterList.Add("千", "仟");
filterList.Add("整", "");
for (int i = 0; i < filterList.Count; i++)
{
string key = filterList.GetKey(i);
if (str.Contains(key))
{
str = str.Replace(key, filterList.Get(i));
}
}
List<decimal> decimalList = new List<decimal>();
decimal tempValue = 0;
//拆分
if (str.Contains("亿"))
{
var arr = Regex.Split(str, @"亿", RegexOptions.IgnoreCase);
tempValue = ToLowerCaseFunction(arr[0]);
if (arr.Length > 1)
{
str = arr[1];
}
decimalList.Add(tempValue * 100000000);
}
if (str.Contains("万"))
{
var arr = Regex.Split(str, @"万", RegexOptions.IgnoreCase);
tempValue = ToLowerCaseFunction(arr[0]);
if (arr.Length > 1)
{
str = arr[1];
}
decimalList.Add(tempValue * 10000);
}
if (str.Contains("圆"))
{
var arr = Regex.Split(str, @"圆", RegexOptions.IgnoreCase);
tempValue = ToLowerCaseFunction(arr[0]);
if (arr.Length > 1)
{
str = arr[1];
}
decimalList.Add(tempValue);
}
if (str.Contains("角") || str.Contains("分"))
{
str = str.Replace("角", "").Replace("分", "");
decimal.TryParse(str, out tempValue);
decimalList.Add(tempValue / 100);
}
return Math.Round(decimalList.Sum(), 2); //保留两位小数
}
}
string rmbStr = "肆拾贰万贰仟肆佰肆拾壹元叁角贰分";
//大写金额转换
decimal money = RMBConversion.ToLowerCase(rmbStr);
result:422441.32