27

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

decimal h = Convert.ToDecimal("2.09550901805872E-05");   

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

6 回答 6

45

您还必须添加NumberStyles.AllowDecimalPoint

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

MSDN对此很清楚:

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

于 2013-07-11T07:39:52.373 回答
5

采用System.Globalization.NumberStyles.Any

decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any);
于 2013-07-11T07:46:50.090 回答
4

由于小数点分隔符"."在您的字符串中)可能因文化而异, 因此使用起来更安全InvariantCulture。不要忘记允许这个小数分隔符 ( 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);
于 2013-07-11T07:46:21.080 回答
1
Decimal h2 = 0;
Decimal.TryParse("2.005E01", out h2);
于 2013-07-11T07:48:09.497 回答
1
decimal h = Convert.ToDecimal("2.09550901805872E-05");   
decimal h2 = decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any)
于 2019-06-19T09:23:16.223 回答
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);
于 2020-08-28T16:58:46.003 回答