我花了一天的时间来弄清楚if语句之一为字符串值返回true的问题。
我们正在解析以检查值是数字还是字符串。我发现使用了这个语句,当字符串值作为6E02时,语句返回true,这是一个double值。
var double temp;
var val ="6E02"
result = double.TryParse(val, out temp)
如何解决此问题,以便为(数字)E0(数字)
等字符串返回结果false简单的方法我相信首先检查文本是否包含E0,如果它只是返回false。但有没有更好的方法来处理这个或另一个内置的方法来用?
替换方法答案 0 :(得分:13)
6E02是6 * 10 ^ 2或600的科学记数法,这肯定是双倍的。这是内置于C#。
如果你想用科学记数法排除数字,TryParse
有一个过载,它有几个选项,其中一个选项是否包括科学记数法。
var double temp;
var val = "6E02";
result = double.TryParse(val, NumberStyles.None, CultureInfo.CurrentCulture, out temp);
....
此示例不采用任何样式,这意味着只会解析带有数字的字符串。您可以在Sam的回答中提及其他选项。
您还必须指定具有此重载的区域性;我的示例使用应用程序的当前文化,但您可以明确地给它任何你想要的。
答案 1 :(得分:10)
默认情况下,double.TryParse
使用NumberStyles
中的以下标记:
您可以使用other overload of TryParse
根据自己的喜好仅指定其中的一部分。特别是,您希望删除(至少)AllowExponent
标志。
答案 2 :(得分:3)
它返回true,因为它将其视为科学记数法,as noted here:
大写或小写字符' e',表示指数(科学)表示法。
最简单的方法是检查字符串是否包含字母e
:
if(val.ToLower().Contains("e"))
{
//Remove the letter, or parse it in a different way.
}