Extract decimal from start of string

.net, c#

Solution

I would create a regular expression matching the leading number part. This will partly depend on whether you will always have a decimal point, whether you want to allow commas for thousands separators, whether it will always use `.` as the decimal point, etc. It might look something like this though:

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

Then match that regular expression against your text, take the value of the match (if it's successful) and use `decimal.Parse` or `double.Parse` on that value:

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

Note that for "natural" values such as mass, you may be better off with `double` than `decimal`. The latter is more appropriate for "artificial" values such as currency, which are naturally best expressed in decimal and have exact values. It depends on what you're doing though.

Problem

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; } ```

Original source