从字符串的开头提取小数

Ank*_*ain 10 .net c#

我有一个字符串喜欢5.5kg7.90gram我想得到5.57.90作为十进制值.如何在C#中获得这样的结果,还有一件事我的字符串将始终以十进制开头.

这是我的代码,只要遇到除小数之外的任何内容,就会抛出错误.

string weight = attributeValue;
if (!string.IsNullOrEmpty(weight))
{
    product.Weight = Convert.ToDecimal(attributeValue);
}
else
{
    product.Weight = 0.00m;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 28

我会创建一个与前导数字部分匹配的正则表达式.这在一定程度上取决于你是否总是有一个小数点,是否要允许数千个分隔符的逗号,它是否总是.用作小数点等等.它可能看起来像这样:

^-?\d+(?:\.\d+)?
Run Code Online (Sandbox Code Playgroud)

然后将该正则表达式与您的文本匹配,获取匹配的值(如果成功)并使用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);
}
Run Code Online (Sandbox Code Playgroud)

请注意,对于诸如质量之类的"自然"值,您可能double比使用更好decimal.后者更适合于诸如货币之类的"人为"值,这些值自然最好用十进制表示并具有精确值.这取决于你在做什么.