为什么double.TryParse("6E02",out tempDouble)返回true?

akd*_*akd -5 c# double exponent tryparse

我花了一天的时间来弄清楚if语句之一为字符串值返回true的问题.

我们正在解析以检查值是数字还是字符串.我发现使用了这个语句,当字符串值作为6E02时,语句返回true,这是一个double值.

var double temp;
var val ="6E02"
result = double.TryParse(val, out temp)
Run Code Online (Sandbox Code Playgroud)

如何修复此问题以返回字符串的结果为false,如(Number)E0(Number)

简单的方法我相信首先检查文本是否包含E0,如果它只返回false.但有没有更好的方法来处理这个或另一个内置的方法来替换方法?

And*_*old 13

6E02是6*10 ^ 2或600的科学记数法,当然是双倍的.这是内置于C#中的.

如果你想用科学记数法排除数字,那么有一个过载TryParse,有几个选项,其中之一是是否包括科学记数法.

var double temp;
var val = "6E02";
result = double.TryParse(val, NumberStyles.None, CultureInfo.CurrentCulture, out temp);
....
Run Code Online (Sandbox Code Playgroud)

此示例不采用任何样式,这意味着只会解析具有数字的字符串.您可以在Sam的回答中提到其他选项.

您还必须指定具有此重载的区域性; 我的示例使用应用程序的当前文化,但您可以明确地给它任何你想要的.


Sam*_*ell 10

默认情况下,double.TryParse使用以下标志NumberStyles:

  • NumberStyles.AllowThousands
  • NumberStyles.Float,它是以下组合的别名:
    • NumberStyles.AllowLeadingWhite
    • NumberStyles.AllowTrailingWhite
    • NumberStyles.AllowLeadingSign
    • NumberStyles.AllowDecimalPoint
    • NumberStyles.AllowExponent

您可以使用其他重载TryParse来根据自己的喜好仅指定其中的一部分.特别是,您想删除(至少)AllowExponent标志.