【问题标题】:Input String not in correct Format error C#输入字符串不正确格式错误C#
【发布时间】:2016-06-15 05:11:45
【问题描述】:

我正在尝试将字符串“5.7”(来自文本框)转换为这样的浮点数:

float m = float.Parse(TextBox9.Text);

但我收到以下错误:

System.FormatException:输入字符串的格式不正确。

请问怎么了?

【问题讨论】:

  • textbox 持有什么价值
  • TextBox 得到一个类似 6.7 的值
  • 你为什么不使用 TryParse 方法?
  • 你有什么Culture?您当前的文化可能有不同的小数分隔符
  • 试试这个:float m = float.Parse(TextBox9.Text, CultureInfo.InvariantCulture); CultureInfo.InvariantCulture 已将小数分隔符设置为 .(点)

标签: c#


【解决方案1】:
float.Parse(Textbox9.Text, CultureInfo.InvariantCulture.NumberFormat);

【讨论】:

    【解决方案2】:

    您是例外,因为 TextBox9 中的文本不符合正确十进制数的“国家/地区规则”。如果点代表千位分隔符而不是小数点,通常会发生这种情况。也许你可以使用:

    float number = float.Parse(TextBox9.Text, CultureInfo.InvariantCulture);
    

    float number = float.Parse(TextBox9.Text, Thread.CurrentThread.CurrentUICulture);
    

    为避免该异常,您可以使用:

    float number;
    if (!float.TryParse(TextBox9.Text,  out number))
        MessageBox.Show("Input must be a decimal number.");
    

    【讨论】:

    • Thread.CurrentThread.CurrentUICulture 默认使用。避免异常不是很好的方法
    • 异常对于获取出错信息非常重要。在应用程序的顶层,您可以处理异常并向用户显示有关它的一些信息。当你避免异常时,你没有得到关于错误的信息
    • 如果在某些模型中检查输入,我同意你的多层设计。但在这里,我们处于顶层。否则将无法访问TextBox9。此外,要求是输入一个数字。在这种情况下,对我来说,在文本框中输入非数字并不是一种异常行为。这就是为什么我会避免异常。
    • 输入验证和清理完全是正确的做法。程序不应该因为预期而崩溃,而预期在这里的意思是“我们知道这会发生”。 OP 必须决定他的程序是否应该同时接受 6.76,7 作为同一事物,或者它们是否意味着不同的事物,以及它是否应该在使用不同小数点和千位分隔符的文化中表示不同的事物。由于 OP 似乎对这些细微差别一无所知,因此让他意识到这一点也是正确的做法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多