我有一个类似5.5kg
或7.90gram
的字符串,我希望将5.5
或7.90
作为十进制值。如何在C#中获得这样的结果,还有一件事我的字符串将始终以十进制开头。
这是我的代码,只要遇到除小数之外的任何内容,就会抛出错误。
string weight = attributeValue;
if (!string.IsNullOrEmpty(weight))
{
product.Weight = Convert.ToDecimal(attributeValue);
}
else
{
product.Weight = 0.00m;
}
答案 0 :(得分:28)
我会创建一个与前导数字部分匹配的正则表达式。这部分取决于你是否总是有一个小数点,是否要允许数千个分隔符使用逗号,是否总是使用.
作为小数点等等。看起来像这样:
^-?\d+(?:\.\d+)?
然后将该正则表达式与您的文字进行匹配,获取匹配的值(如果成功)并对该值使用decimal.Parse
或double.Parse
:
Regex regex = new Regex(@"^-?\d+(?:\.\d+)?");
Match match = regex.Match(text);
if (match.Success)
{
weight = decimal.Parse(match.Value, CultureInfo.InvariantCulture);
}
请注意,对于“自然”值(例如质量), 可以<{1}}比double
更好。后者更适合于诸如货币之类的“人为”值,这些值自然最好用十进制表示并具有精确值。这取决于你在做什么。
答案 1 :(得分:2)
这是一种完全不同的方法
string oldstr = "1.7meter";
Char[] strarr = oldstr.ToCharArray().Where(c => Char.IsDigit(c) || Char.IsPunctuation(c)).ToArray();
decimal number = Convert.ToDecimal( new string(strarr));
答案 2 :(得分:0)
对于您的输入格式,您可以通过此代码获得小数
var weight =Decimal.Parse( Regex.Match(input_string, "[0-9]*\\.*[0-9]*").Value);
如果您的输入字符串格式不同,则必须更改 正则表达式。