Как конфертировать из String в Decimal в Visual Basic? - PullRequest
0 голосов
/ 24 апреля 2018

Форма имеет 2 списка: одно для ввода размеров и цены рубашки, а другое для отображения первоначальной цены. После нажатия на кнопку второе поле списка заменяет исходные цены на цену со скидкой (только для ценбольше 100) 10% скидка.Эта часть кода дает мне ошибку «Не могу преобразовать из строки в десятичную форму». Для i As Integer = 0 To ListBox2.Items.Count - 1 getdiscountsprice (decprice) Decimal.TryParse (ListBox2.Items (i), decprice)

enter image description here

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim strShirt As String
    Dim strprice As String


    Dim blnmore As Boolean = True
    Do While blnmore
        strShirt = InputBox("Enter shirt: ")
        strprice = InputBox(" Enter shirt price: ")
        If strShirt = String.Empty Or strprice = String.Empty Then
            blnmore = False
        End If

        ListBox1.Items.Add(strShirt & " " & strprice)
        ListBox2.Items.Add(strprice)
    Loop
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim decprice As Decimal


    For i As Integer = 0 To ListBox2.Items.Count - 1
        getdiscountedprice(decprice)
        Decimal.TryParse(ListBox2.Items(i), decprice)

    Next
End Sub
Private Function getdiscountedprice(ByVal Fstrprice As Integer) As Decimal 'cause decimal will be returned 
    Dim lastprice As Decimal

    If Fstrprice > 100 Then
        lastprice = Fstrprice * 0.9
    End If
    Return (lastprice)

End Function

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Me.Close()
End Sub

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Вы помещаете объект типа в param и конвертируете в десятичное число.

    Public Shared Function ConvertToDecimal(ByVal p_obj As Object, Optional ByVal p_isForUi As Boolean = False) As Decimal
    Dim dRet As Decimal

    If ((p_obj Is DBNull.Value) OrElse (p_obj Is Nothing)) Then
        dRet = Decimal.MinValue
    Else
        If (p_isForUi) Then
            Dim bParseOk As Boolean = Decimal.TryParse(p_obj.ToString(), dRet)
        Else
            Try
                dRet = CDec(p_obj)
            Catch exc As Exception
                dRet = Decimal.MinValue
            End Try
        End If
    End If

    Return dRet
0 голосов
/ 24 апреля 2018

Вам необходимо преобразовать значение из строки в десятичную.Вы можете использовать функцию преобразования типов CDec

decprice = CDec(ListBox2.Items(i).ToString)

или метод TryParse для десятичного числа

Decimal.TryParse(ListBox2.Items(i).ToString, decprice)

У вас есть несколько проблем с вашей программой, которые необходимо решить.Одна проблема с вашей программой заключается в цикле Do While внутри вашего Button1_Click Sub.Если одна из строк либо strShirt, либо strPrice пуста, вы устанавливаете для blnmore значение False, чтобы цикл не выполнялся снова, но вы все равно добавляете строковые значения в поля списка независимо от того, были они пустыми или нет.Вы должны изменить свой код на строки в списках только в том случае, если они имеют значения:

If strShirt = String.Empty OrElse strprice = String.Empty Then
    blnmore = False
Else
    ListBox1.Items.Add(strShirt & " " & strprice)
    ListBox2.Items.Add(strprice)
End If

Также ваша функция getdiscountsprice ожидает целое число, а вы передаете ему десятичное число.Функция возвращает десятичное число, и вы ничего не делаете с этим возвращаемым значением, например, сохраняете его или распечатываете.Вы должны преобразовывать значение списка в десятичное число до вызова getdiscountsprice, а не после.TryParse возвращает логическое значение, указывающее, что если оно прошло успешно, вы, вероятно, захотите вызывать getdiscounts price только при наличии действительного десятичного значения.

If Decimal.TryParse(ListBox2.Items(i).ToString, decprice) Then
   getdiscountedprice(decprice)
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...