10

I have a string like 5.5kg or 7.90gram and I want to get 5.5 or 7.90 as a decimal value. How can I get such result in C# and one more thing that my string will always starts with decimal.

Here is my code that throws an error whenever it will encounter anything except a decimal.

string weight = attributeValue;
if (!string.IsNullOrEmpty(weight))
{
    product.Weight = Convert.ToDecimal(attributeValue);
}
else
{
    product.Weight = 0.00m;
}
4

3 回答 3

27

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

^-?\d+(?:\.\d+)?

然后将该正则表达式与您的文本进行匹配,获取匹配的值(如果成功)并在该值上使用decimal.Parsedouble.Parse

Regex regex = new Regex(@"^-?\d+(?:\.\d+)?");
Match match = regex.Match(text);
if (match.Success)
{
    weight = decimal.Parse(match.Value, CultureInfo.InvariantCulture);
}

请注意,对于诸如质量之类的“自然”值,使用than可能会更好。后者更适合货币等“人工”值,这些值自然最好用十进制表示并具有精确值。这取决于你在做什么。doubledecimal

于 2012-06-16T07:18:55.363 回答
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)); 
于 2012-06-16T07:53:39.120 回答
0

对于您的输入格式,您可以通过此代码获得十进制

var weight =Decimal.Parse( Regex.Match(input_string, "[0-9]*\\.*[0-9]*").Value);

如果您的输入字符串格式不同,那么您必须更改正则表达式模式

于 2012-06-16T07:44:16.177 回答