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

Con*_*oly 19 c#

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

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

Mar*_*zek 32

您还必须添加NumberStyles.AllowDecimalPoint:

Decimal.Parse("2.09550901805872E-05", NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);
Run Code Online (Sandbox Code Playgroud)

MSDN很清楚:

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


Dmi*_*nko 9

由于小数分隔符"."在字符串中)可能因文化而异 ,因此使用更安全InvariantCulture。不要忘记允许这个小数点分隔符 ( NumberStyles.Float)

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

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

  decimal h = Decimal.Parse(
    "2.09550901805872E-05", 
     NumberStyles.Any, 
     CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)


Dam*_*ith 5

System.Globalization.NumberStyles.Any

decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any);
Run Code Online (Sandbox Code Playgroud)


Con*_*oly -2

Decimal h2 = 0;
Decimal.TryParse("2.005E01", out h2);
Run Code Online (Sandbox Code Playgroud)

  • 它不会改变 h2,它保持为 0! (3认同)
  • 这将编译并运行,但您应该始终检查 tryparse 的返回。在这种情况下,它会失败并且 h2 不会更改。 (3认同)