How to convert percentage string to double?

c#, formatting

Solution

If you care about catching formatting errors, I would use TrimEnd rather than Replace. Replace would allow formatting errors to pass undetected.

var num = decimal.Parse( value.TrimEnd( new char[] { '%', ' ' } ) ) / 100M;

This will ensure that the value must be some decimal number followed by any number of spaces and percent signs, i.e, it must at least start with a value in the proper format. To be more precise you might want to split on '%', not removing empty entries, then make sure that there are only two results and the second is empty. The first should be the value to convert.

var pieces = value.Split( '%' );
if (pieces.Length > 2  || !string.IsNullOrEmpty(pieces[1]))
{ 
    ... some error handling ... 
}
var num = decimal.Parse( pieces[0] ) / 100M;

Using Replace will allow you to successfully, and wrongfully IMO, parse things like:

- %1.5

- 1%.5

- 1.%5

in addtion to `1.5%`

Problem

I have a string like "1.5%" and want to convert it to double value. It can be done simple with following: ``` public static double FromPercentageString(this string value) { return double.Parse(value.SubString(0, value.Length - 1)) / 100; } ``` but I don't want to use this parsing approach. Is any other approach with IFormatProvider or something like this?

Original source