I have this line of code:
System.Convert.ChangeType(input, destinationType, CultureString);
If called with a culture of de-DE and input is 4,50 and destinationType is double it returns 4.50.
If I call the same with en-GB it converts it to 450.00.
Is there a way to make it return 4.50 or throw an exception saying you can't convert 4,50 to double.
Thanks
As specified from MSDN on the specific overload you are using:
Returns an object of the specified type whose value is equivalent to the specified object. A parameter supplies culture-specific formatting information.
In other words, it tries to understand how to convert based on the culture's formatting information. So 4,50
means 4.5
in de-DE yet the same number is identified as 4.50
in en-GB (Notice there is a period not a comma).
A comma is used in the en-GB culture to talk about thousands (e.g 4000 can be written 4,000
) when 4,50 is parsed, the comma is ignored and therefor the output is 450.
This is just like the date 21st of January 2010 is parsed 01/21/10
(mm/dd/yy) in the US yet it is parsed 21/01/10
(dd/mm/yy) in the UK.
So actually, no exception should be raised since 4,50 CAN be converted to a double, depends where in the world :)
Note: C# has the CultureInfo.InvariantCulture when you want culture-independent conversions.
If you want to throw an exception, don't use ChangeType, use Double.Parse
with the NumberStyles
just like @ChrisF explained in his answer.
This for instance will throw an exception:
Double.Parse("4,50", NumberStyles.Float);