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