如何将这种科学记数法转换为十进制?

时间:2013-07-11 07:35:10

标签: c#

在谷歌搜索后,使用下面的代码仍然无法编译

decimal h = Convert.ToDecimal("2.09550901805872E-05");   
decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.AllowExponent);

6 个答案:

答案 0 :(得分:30)

您还必须添加NumberStyles.AllowDecimalPoint

Decimal.Parse("2.09550901805872E-05", NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);

MSDN很清楚:

  

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

答案 1 :(得分:3)

使用System.Globalization.NumberStyles.Any

decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any);

答案 2 :(得分:2)

由于小数点分隔符(字符串中的“。”)因文化而异 使用不变文化更安全。别忘了允许这个小数 separator(NumberStyles.Float)

  decimal h = Decimal.Parse("2.09550901805872E-05", NumberStyles.Float | NumberStyles.AllowExponent, CultureInfo.InvariantCulture);

Perharps,更方便的代码就是当我们使用NumberStyles.Any时:

  decimal h = Decimal.Parse("2.09550901805872E-05", NumberStyles.Any, CultureInfo.InvariantCulture);

答案 3 :(得分:1)

Decimal h2 = 0;
Decimal.TryParse("2.005E01", out h2);

答案 4 :(得分:0)

decimal h = Convert.ToDecimal("2.09550901805872E-05");   
decimal h2 = decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any)

答案 5 :(得分:0)

该主题对我很有帮助。为了他人的利益,这是完整的代码:

var scientificNotationText = someSourceFile;
// FileTimes are based solely on nanoseconds.
long fileTime = 0;
long.TryParse(scientificNotationText, NumberStyles.Any, CultureInfo.InvariantCulture, 
out fileTime);
var dateModified = DateTime.FromFileTime(fileTime);