我不知道为什么但是在比较两个值时我得到FormatException
。有人能告诉我我做错了什么吗?我已经尝试使两个值都浮动,但同样的例外......
float label1 = float.Parse(label15.Text);
int box1 = int.Parse(textBox23.Text);
if (label1 <= box1)
{
//Do things"
}
答案 0 :(得分:2)
参数格式为时抛出的异常 无效,或者复合格式字符串格式不正确。
错误是因为无论label15
/ textBox23
的值是多少,它都不是有效数字。
分别使用float.TryParse
和int.TryParse
,因为它们不会抛出异常:
float label1;
if(label15.Text, out label1){
// do something
}
int box1;
if(textBox23.Text, out box1){
// do something
}
但是,您仍然需要确保label15
/ textBox23
是可解析的值,否则控件将不会进入if
语句。
答案 1 :(得分:1)
你没有使用适当的异常处理就让自己陷入困境。
float label1 = float.Parse(label15.Text); //problem 1
int box1 = int.Parse(label15.Text); //problem 2
if (label1 <= box1) //problem 3
{
//Do things"
}
问题1和2是您不能确保您的UI为您提供可以解析的值。这将抛出异常。问题3是因为你不知道你的解析是否成功,你不知道你是否可以进行比较。试试TryParse()
。
float label1 = 0;
int box1 = 0;
if(float.TryParse(label15.Text, out label1)
&& int.TryParse(label15.Text, out box1))
{
if (label1 <= box1)
{
//Do things"
}
}
TryParse()
函数会将现有变量填充为out
个参数,但会返回bool
。如果解析失败,则返回false
,并允许代码继续。通过使这些成功成为if
条件,我们完全避免错误。
您也可以始终将代码包装在try-catch block
中以确定任何异常的原因并生成输出,但您绝不希望这样做来管理您的逻辑流程。您可以使用它来解决此问题,以及我发布的可能解决方案。
答案 2 :(得分:1)
float.Parse方法可以采用第二个参数。
假设您正在根据您的个人资料寻找德语号码解析。
因此,如果您想解析德语数字格式,请确保该方法知道(因为根据美国标准,“2,5”不是浮点数...甚至没有点开头)。
理论上,您的System.Globalization.CultureInfo.CurrentCulture
应该已经是您所需要的。如果不是,您可以创建所需的文化:
这应该可以正常工作:
float f = float.Parse("2,5", new System.Globalization.CultureInfo("de-DE"))
请记住,尽管您尽了最大努力,但人们可能仍然只是在文本框中输入垃圾,因此您应该留意TryParse,如其他答案中所述。但即使在那里:注意正确的文化来解析你的数字。