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

C# 如何将这种科学记数法转换成十进制?,c#,decimal,C#,Decimal,在谷歌搜索后,使用以下代码仍无法编译: 您还必须添加numberstyle.AllowDecimalPoint: Decimal.Parse("2.09550901805872E-05", NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint); 很清楚: 指示数字字符串可以采用指数表示法。这个 AllowExponent标志允许解析的字符串包含指数 以“E”或“E”字符开头,后跟 可选的正负号和整数。换句话说,它 成功解析格式

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


您还必须添加
numberstyle.AllowDecimalPoint

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

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

因为十进制分隔符(
在字符串中)可能因区域性而异 使用
InvariantCulture
更安全。别忘了允许这个小数点 分隔符(
numberstyle.Float

另外,更方便的代码是当我们使用
numberstyle时。Any

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

使用
System.Globalization.numberstyle.Any

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);

您需要从字符串转换吗?你能不能只输入文本
2.09550901805872E-05M
?只能编译tryparse这个编译对我来说很好。但您会遇到运行时异常。@这是错误的。TryParse不会抛出异常,而Parse可能会在失败时抛出异常。不抛出异常并不意味着它是正确的。您应该解决这个问题,即为什么引发异常(格式错误),而不是症状(异常)。由于格式正确,正确的解决方案是使Decimal.Parse通过正确的标志和区域性设置接受格式。它不会更改h2,而是保持为0!这将编译并运行,但您应该始终检查tryparse的返回。在这种情况下,它会失败并且h2不会更改。如果要使用TryParse:Decimal.TryParse(“2.005E01”,System.Globalization.NumberStyles.Any,null,out h2);
decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any);
Decimal h2 = 0;
Decimal.TryParse("2.005E01", out h2);
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);