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

本文关键字:转换 十进制 | 更新日期: 2023-09-27 18:21:51

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

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

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

您也必须添加NumberStyles.AllowDecimalPoint

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

MSDN对此很清楚:

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

由于十进制分隔符(字符串中的".")可能因区域性而异使用CCD_ 3更安全。别忘了允许这个小数分离器(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);

使用System.Globalization.NumberStyles.Any

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

这个线程对我很有帮助。为了其他人的利益,这里有完整的代码:

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);
Decimal h2 = 0;
Decimal.TryParse("2.005E01", out h2);