【发布时间】:2022-02-01 23:41:12
【问题描述】:
我有一个用 Visual Basic 编写的单位转换器,使用 Visual Studio 2013。该程序运行良好,直到用户的初始输入为小数点。我收到此错误消息:从字符串“。”转换键入“十进制”无效。如何让该程序接受小数点作为用户的初始输入而不会导致程序崩溃?代码如下。
Private Function GetLength1(ByVal decLengthUnit1 As Decimal) As Decimal
Dim decResult1 As Decimal
If cboUnitType.SelectedItem = "Length" Then
' converts kilometer to...
If cbo1.SelectedItem = "Kilometer" Then
If cbo2.SelectedItem = "Kilometer" Then
decResult1 = txtUnit1.Text
ElseIf cbo2.SelectedItem = "Meter" Then
decResult1 = (decLengthUnit1 * 1000)
ElseIf cbo2.SelectedItem = "Centimeter" Then
decResult1 = (decLengthUnit1 * 100000)
ElseIf cbo2.SelectedItem = "Millimeter" Then
decResult1 = (decLengthUnit1 * 1000000)
ElseIf cbo2.SelectedItem = "Mile" Then
decResult1 = (decLengthUnit1 * 0.621371191)
ElseIf cbo2.SelectedItem = "Yard" Then
decResult1 = (decLengthUnit1 * 1093.613297)
ElseIf cbo2.SelectedItem = "Foot" Then
decResult1 = (decLengthUnit1 * 3280.83989)
ElseIf cbo2.SelectedItem = "Inch" Then
decResult1 = (decLengthUnit1 * 39370.07868)
End If
End If
End If
Return decResult1.ToString().Trim("0") ' this is where I convert the data back to a string with some formatting
End Function
Private Sub txtUnit1_TextChanged(sender As Object, e As EventArgs) Handles txtUnit1.TextChanged
' convert string to numeric data type
Decimal.TryParse(txtUnit1.Text, decUnit1) ' this is where I convert user input to decimal data type
' handle String.Empty, or negative sign
If txtUnit1.Text = "" OrElse txtUnit1.Text = "-" Then
txtUnit2.Text = ""
ElseIf cboUnitType.SelectedItem = "Length" Then
suppressTextBox2TextChanged = True
txtUnit2.Text = GetLength1(decUnit1)
suppressTextBox2TextChanged = False
End If
End Sub
【问题讨论】:
-
"用户的初始输入是
."。您不能检查该值的文本并进行转换吗?或者将值设置为零,然后执行On Error Resume Next,然后转换 - 如果没有错误,则该值被覆盖,否则它将为零。 -
代码中的哪一行导致了问题?
-
@Floris - 我已经在尝试使用 TryParse 方法对其进行转换,但出现错误。你建议我用什么转换它?
-
@EmmadKareem - 这是程序停止的地方:Return decResult1.ToString("N").Trim("0")
-
扎克,你让它工作了吗?
标签: vb.net