如何在C#中将正或负科学记数法转换为数字?

时间:2016-04-25 14:19:12

标签: c# type-conversion decimal data-conversion scientific-notation

我试过这两个代码:

1)

Decimal h2 = 0;
Decimal.TryParse("-8.13E-06", out h2);

2)

Decimal.Parse(Convert.ToString(used[row, column].Value), NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint); 

但它不适用于 -8.13E-06 值。

将科学记数法转换为十进制的任何其他更好的选项?

先谢谢。

2 个答案:

答案 0 :(得分:4)

如果您的文化使用"。"作为分隔符:

decimal d = Decimal.Parse("-8.13E-06", System.Globalization.NumberStyles.Float);

或者您可以指定InvariantCulture

decimal d = Decimal.Parse("-8.13E-06", System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture);

或在你的例子中:

Decimal h2 = 0;
Decimal.TryParse("-8.13E-06", NumberStyles.Float, CultureInfo.InvariantCulture, out h2);

答案 1 :(得分:1)

AllowExponent不会按照以下方式工作: https://msdn.microsoft.com/en-us/library/system.globalization.numberstyles(v=vs.110).aspx

  

表示数字字符串可以是指数表示法。 AllowExponent标志允许解析的字符串包含指数   以“E”或“e”字符开头,后跟一个   可选的正号或负号和整数。换句话说,它   成功解析nnnExx,nnnE + xx和nnnE-xx形式的字符串。   它不允许小数点分隔符或有效数字符号或   尾数;要允许解析字符串中的这些元素,请使用   AllowDecimalPoint和AllowLeadingSign标志,或使用复合样式   包括这些单独的旗帜。

System.Globalization.NumberStyles.Float是一种复合风格