How to convert this scientific notation to decimal?
use System.Globalization.NumberStyles.Any
decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any);
You have to add NumberStyles.AllowDecimalPoint
too:
Decimal.Parse("2.09550901805872E-05", NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);
MSDN is clear about that:
Indicates that the numeric string can be in exponential notation. The AllowExponent flag allows the parsed string to contain an exponent that begins with the "E" or "e" character and that is followed by an optional positive or negative sign and an integer. In other words, it successfully parses strings in the form nnnExx, nnnE+xx, and nnnE-xx. It does not allow a decimal separator or sign in the significand or mantissa; to allow these elements in the string to be parsed, use the AllowDecimalPoint and AllowLeadingSign flags, or use a composite style that includes these individual flags.
decimal h = Convert.ToDecimal("2.09550901805872E-05");
decimal h2 = decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any)
Since decimal separator ("."
in your string) can vary from culture to culture
it's safier to use InvariantCulture
. Do not forget to allow this decimal
separator (NumberStyles.Float
)
decimal h = Decimal.Parse(
"2.09550901805872E-05",
NumberStyles.Float | NumberStyles.AllowExponent,
CultureInfo.InvariantCulture);
Perharps, more convenient code is when we use NumberStyles.Any
:
decimal h = Decimal.Parse(
"2.09550901805872E-05",
NumberStyles.Any,
CultureInfo.InvariantCulture);