在谷歌搜索后,使用下面的代码仍然无法编译
decimal h = Convert.ToDecimal("2.09550901805872E-05");
decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.AllowExponent);
答案 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);