Проблемы с вычислениями и преобразованиями в Visual Basic Form - PullRequest
0 голосов
/ 06 октября 2010

В приведенном ниже коде я получаю "Преобразование из строки" в тип "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</p> <pre><code>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

Конечный класс

Ответы [ 2 ]

1 голос
/ 06 октября 2010

Вам необходимо явно привести ваши переменные при вставке их в текстовое поле.

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

Например, ваш текст TextBox3.Text выше - это String, а не Decimal.Вы пытаетесь перемещаться по типам, не приводя их к соответствующему типу.

0 голосов
/ 06 октября 2010

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

Вы используете Decimal.Parse неправильно.Decimal.Parse используется для разбора String на тип Decimal, вы, кажется, используете его для преобразования строки в десятичную и десятичную в строку.Если вы хотите получить строковое представление десятичного значения, вам следует использовать ToString.В приведенном выше примере из вашего кода CommisionCalc возвращает десятичное число, вам нужно вызвать CommissionCalc (SalesDecimal) .ToString (), а не Decimal.Parse ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...