33

What's the proper way to convert from a scientific notation string such as "1.234567E-06" to a floating point variable using C#?

odbasta
  • 515
  • 2
  • 7
  • 8

2 Answers2

62
Double.Parse("1.234567E-06", System.Globalization.NumberStyles.Float);
  • 19
    Will not work if the current culture's decimal separator is not `.`. So the always working approach is either using `NumberStyles.Any` or (better) force `InvariantCulture`: `Double.Parse("1.234567E-06", NumberStyles.Float, CultureInfo.InvariantCulture);` – Tim Schmelter Jun 10 '13 at 12:48
  • Note that if you tack a .ToString() on the end of this procedure call it will return the scientific notation and not a string of only digits. I needed to include a format string parameter ("0.0000") in the .ToString() call to make the float format correctly. – Eric Ness Jan 10 '14 at 17:34
13

Also consider using

Double.TryParse("1.234567E-06", System.Globalization.NumberStyles.Float, out MyFloat);

This will ensure that MyFloat is set to value 0 if, for whatever reason, the conversion could not be performed. Or you could wrap the Double.Parse() example in a Try..Catch block and set MyFloat to a value of your choosing when an exception is detected.

Jaymie Thomas
  • 812
  • 2
  • 10
  • 22
  • 22
    You don't want to rely on MyFloat being 0 to indicate a failed conversion, you want to rely on the bool return value. – Carl Oct 21 '08 at 08:55