【问题标题】:How to convert from String to Decimal in Visual basic?如何在 Visual Basic 中将字符串转换为十进制?
【发布时间】:2018-04-24 14:25:03
【问题描述】:

表单有2个列表框,一个用于输入衬衫尺寸和价格,另一个用于显示原价,点击一个按钮后,第二个列表框将原价转换为折扣价(仅用于价格大于 100) 可享受 10% 的折扣。这部分代码给了我一个错误“无法从字符串转换为十进制” For i As Integer = 0 To ListBox2.Items.Count - 1 getdiscountedprice(decprice) Decimal.TryParse(ListBox2.Items(i), decprice)

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

【问题讨论】:

  • Decimal.TryParse 您的标题与您的变量或您的错误不匹配。
  • @LarsTech 你是什么意思?
  • 字符串到整数?您的图像显示小数,而不是整数。不要发布代码或异常的图像,我们希望在问题中发布文本。
  • 请阅读idownvotedbecau.se/imageofcodeidownvotedbecau.se/imageofanexception/并相应地编辑您的问题。
  • @LarsTech 问题已添加,请查看

标签: vb.net winforms


【解决方案1】:

您需要将值从字符串转换为十进制。 可以使用类型转换函数CDec

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

或 Decimal 的 TryParse 方法

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

您的程序存在一些需要解决的问题。 您的程序的一个问题是在您的 Button1_Click Sub 内的 Do While 循环中。 如果字符串 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

此外,您的 getdiscountedprice 函数需要一个整数,而您将其传递给十进制。该函数返回一个 Decimal 并且您没有对该返回值执行任何操作,例如保存或打印它。 您应该在调用 getdiscountedprice 之前将列表框值转换为 Decimal,而不是之后。 TryParse 返回一个布尔值,指示它是否成功,您可能只想在具有有效的十进制值时调用 getdiscounted price。

If Decimal.TryParse(ListBox2.Items(i).ToString, decprice) Then
   getdiscountedprice(decprice)
End If

【讨论】:

  • decprice = CDec(ListBox2.Items(i)) - 这仍然给我同样的错误
  • Decimal.TryParse(ListBox2.Items(i), decprice) - 这使得按钮不起作用
  • 查看您的错误,它说从字符串“”转换为“十进制”类型无效。问题是您正在尝试将空字符串转换为小数,这将导致 CDec 出错并返回 False,TryParse 表明它无法解析字符串。
  • @MarFin 你应该阅读documentation for Decimal.TryParse
  • @phaon 我添加了问题,请查看
【解决方案2】:

您将类型对象放入 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

【讨论】:

    猜你喜欢
    • 2013-02-07
    • 2011-08-25
    • 2014-04-28
    • 1970-01-01
    • 2018-08-31
    • 2022-07-22
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    相关资源
    最近更新 更多