【问题标题】:Problems with calculations and conversions in Visual Basic FormVisual Basic 表单中的计算和转换问题
【发布时间】:2010-10-06 19:29:06
【问题描述】:

在下面的代码中,我得到“从字符串“转换为类型 'Double' 无效。”错误。谁能让我知道这是为什么?谢谢。

Public Class Form1 Dim SalesDecimal As Decimal Const BasePay As Decimal = 250D Const CommissionRate As Decimal = 0.15D Dim Quota As Integer = 1000 Dim TotalSalesAmt, TotalComAmt, GrandTotal As Decimal

Private Sub PayToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PayToolStripMenuItem.Click
    SalesDecimal = Decimal.Parse(TextBox3.Text)
    TextBox2.Text = Decimal.Parse(CommissionCalc(SalesDecimal))
    ***TextBox4.Text = Decimal.Parse(CommissionRate * SalesDecimal)***
    If TextBox3.Text < 1000 Then
        TextBox4.Text = ""
    End If
    TotalSalesAmt += TextBox3.Text
    TotalComAmt += TextBox4.Text
    GrandTotal += TextBox2.Text
End Sub
Private Function CommissionCalc(ByVal Sales As Integer) As Decimal
    Dim Total = (SalesDecimal * CommissionRate) + BasePay
    If Sales >= Quota Then
        Return Total
    Else

        Return BasePay
    End If
End Function

Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
    Me.Close()
End Sub

Private Sub ClearToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClearToolStripMenuItem.Click
    TextBox1.Text = ""
    TextBox2.Text = ""
    TextBox3.Text = ""
    TextBox4.Text = ""


End Sub

Private Sub ColorToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ColorToolStripMenuItem.Click
    With ColorDialog1
        ColorDialog1.ShowDialog()
        TextBox2.ForeColor = .Color

    End With
End Sub

Private Sub FontToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FontToolStripMenuItem.Click
    With FontDialog1
        .ShowDialog()
        TextBox2.Font = .font
    End With

End Sub

Private Sub SummaryToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SummaryToolStripMenuItem.Click
    Dim MessageString As String
    MessageString = "Amount of sales: " & TotalSalesAmt.ToString("C") _
    & Environment.NewLine & Environment.NewLine _
    & "Total Commissions: " & TotalComAmt.ToString("C") _
    & Environment.NewLine & Environment.NewLine _
    & "Total Pay: " & GrandTotal.ToString("C")
    MessageBox.Show(MessageString, "Sales Summary", MessageBoxButtons.OK)


End Sub

结束类

【问题讨论】:

  • 将“Option Strict On”放在源代码文件的顶部。你会得到一百个错误,这需要你一周的时间来修复。但是你会知道字符串和数字之间的区别。
  • 谢谢汉斯,我明白了我的问题所在。

标签: visual-studio-2008 type-conversion


【解决方案1】:

在将变量推入文本框时,您需要显式地转换变量。

If TextBox3.Text < 1000 Then
    TextBox4.Text = ""
End If
TotalSalesAmt += TextBox3.Text
TotalComAmt += TextBox4.Text
GrandTotal += TextBox2.Text

例如,您上面的 TextBox3.Text 是字符串,而不是小数。您试图在类型之间移动而不将它们转换为适当的类型。

【讨论】:

    【解决方案2】:

    TextBox2.Text = Decimal.Parse(CommissionCalc(SalesDecimal))

    您使用 Decimal.Parse 不正确。 Decimal.Parse 用于将 String 解析为 Decimal 类型,您似乎正在使用它来将字符串转换为十进制和将十进制转换为字符串。如果你想得到十进制值的字符串表示,你应该使用 ToString。在上面的代码示例中,CommisionCalc 返回一个小数,您需要调用 CommissionCalc(SalesDecimal).ToString() 而不是 Decimal.Parse()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多