【问题标题】:Stopping a textbox displaying NaN停止显示 NaN 的文本框
【发布时间】:2013-10-30 12:28:08
【问题描述】:

我有一个文本框,显示其他两个相乘的结果,在输入任何内容之前,该框显示 NaN,有没有办法让它显示“0”,甚至在任何相乘之前保持为空。

Dim thick1 As Double
Dim tb8 As Double
Dim result As Double
thick1 = Val(thickness1.Text)
tb8 = Val(TextBox8.Text)
result = thick1 / tb8
TextBox30.Text = FormatNumber(result, 3)

^ 上面的代码是我用于文本框的代码。

【问题讨论】:

  • 停止使用 VAL 它与 VB6 的 VAL 不同。请改用 TryParse,您需要测试 tb8 是否为非零。这段代码在哪里,可能是一个事件过程?那可能是 NaN 问题。

标签: vb.net visual-studio-2010


【解决方案1】:

这似乎是自动运行的事件或表单加载中的代码。如果文本框还没有值,那么result = thick1 / tb8 将导致 Nan(不是数字),因为您不能除以零。

再次假设一个事件或某事:

  If tb8 = 0 then
     Exit Sub
  else
     result = thick1 / tb8
     TextBox30.Text = result.ToString("G3")  

  End if

除了为 TryParse 转储 VAL 之外,请考虑打开 Option Explicit

【讨论】:

  • VB 将在声明 result(和其他变量)时为 Double 提供默认值,即 0.0。问题是除以零。
【解决方案2】:

另一种方法,试试这个:

TextBox30.Text = FormatNumber(result, 3).Tostring("n0")

我认为即使数字不存在,它也应该显示 0(如 NaN 字符串)

MSDN: The Numeric ("N") Format Specifier

如果没有,那么试试这个:

TextBox30.Text = FormatNumber(result, 3).ToString("0")

“0”零占位符

如果存在 1,则用相应的数字替换 0;否则,结果字符串中将出现零。

MSDN: Custom Numeric Format Strings

【讨论】:

    【解决方案3】:

    试试这样的:

    Dim result As Double
    Dim thick1 As Double = CDbl(thickness1.Text)
    Dim tb8 As Double = CDbl(TextBox8.Text)
    If IsNumeric(thick1) AndAlso IsNumeric(tb8) AndAlso tb8 <> 0 Then
        result = thick1 / tb8
        TextBox30.Text = result.ToString("G3")
    End If
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-05
      • 2012-03-26
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 2023-03-18
      • 2017-09-21
      • 2011-11-20
      相关资源
      最近更新 更多