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#
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.
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.
here is a completely different approach
string oldstr = "1.7meter";
Char[] strarr = oldstr.ToCharArray().Where(c => Char.IsDigit(c) || Char.IsPunctuation(c)).ToArray();
decimal number = Convert.ToDecimal( new string(strarr));