Извлечь десятичное из начала строки

У меня есть строка как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;
}
 Hamlet Hakobyan16 июн. 2012 г., 09:19
Используйте TryParse ().

Ответы на вопрос(3)

For your input format you can get decimal by this code

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

if your input string is in different format then you have to change the regex pattern.

Решение Вопроса

Я бы создал регулярное выражение, соответствующее первой части числа. Это будет частично зависеть от того, будете ли выalways иметь десятичную точку, хотите ли вы разрешить запятые для тысяч разделителей, всегда ли он будет использовать. как десятичная точка и т. д. Это может выглядеть примерно так:

^-?\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);
}

Обратите внимание, что для "естественного" такие значения, как масса, выmay быть лучше сdouble чемdecimal, Последнее больше подходит для «искусственного» такие значения, как валюта, которые, естественно, лучше всего выражаются в десятичном виде и имеют точные значения. Это зависит от того, что вы делаете.

 23 нояб. 2016 г., 14:34
Да, конечно, просто название не подразумевает этого, я думаю, что это должно быть отредактировано.
 23 нояб. 2016 г., 14:32
@ WiktorStribi & # x17C; ew: Да, потому что я ответил на заданный вопрос: "еще одна вещь, которую моя строка всегда будет начинать с десятичной части".
 23 нояб. 2016 г., 14:31
Текущее регулярное выражение будет соответствовать плавающим / целым числам в начале строки из-за^ якорь. Чтобы извлечь числа из любого места в строке, используйте-?\d+(?:\.\d+)?, Или же[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?

здесь совершенно другой подход

    string oldstr = "1.7meter";
        Char[] strarr = oldstr.ToCharArray().Where(c => Char.IsDigit(c) || Char.IsPunctuation(c)).ToArray();
        decimal number = Convert.ToDecimal( new string(strarr)); 

Ваш ответ на вопрос