我正在使用Visual Basic和Visual Studio 2012构建单位转换器。我使用1英寸= 0.0833333英尺的转换率进行英寸到英尺的转换。当我输入12英寸时,它给出了0.9999996而不是1的答案。我该如何解决这个问题?
问题在于下面的英寸到英尺转换。
' converts inch to...
If cbo1.SelectedIndex = 3 Then
If cbo2.SelectedIndex = 0 Then
' meter
txtUnit2.Text = (dblUnit1 * 0.0254).ToString.Trim
ElseIf cbo2.SelectedIndex = 1 Then
' millimeter
txtUnit2.Text = (dblUnit1 * 25.4).ToString.Trim
ElseIf cbo2.SelectedIndex = 2 Then
' foot
txtUnit2.Text = (dblUnit1 * 0.0833333).ToString.Trim
ElseIf cbo2.SelectedIndex = 3 Then
' inch
txtUnit2.Text = txtUnit1.Text
End If
End If
答案 0 :(得分:3)
你可以尝试在运行时计算你的转换数,你不应该失去那种精确度..
Dim twelveInches As Double = 12.0
Dim oneInchValue As Double = 1.0 / twelveInches
Console.WriteLine(oneInchValue.ToString())
Console.WriteLine(String.Format("{0} x {1} = {2}", oneInchValue, twelveInches, oneInchValue * twelveInches))
输出:
0.0833333333333333
0.0833333333333333 x 12 = 1
答案 1 :(得分:2)
当我输入12英寸时,它给出了0.9999996而不是1
的答案
0.0833333 * 12 = 0.9999996
将其放入Windows计算器,您将获得相同的结果。你有什么期望?
尝试使用表达式定义常量:
Const inch As Decimal = 1D / 12D
答案 2 :(得分:1)
答案 3 :(得分:0)
这是我最后的工作代码。
' converts inch to...
If cbo1.SelectedIndex = 3 Then
If cbo2.SelectedIndex = 0 Then
' meter
txtUnit2.Text = (dblUnit1 * 0.0254).ToString.Trim
ElseIf cbo2.SelectedIndex = 1 Then
' millimeter
txtUnit2.Text = (dblUnit1 * 25.4).ToString.Trim
ElseIf cbo2.SelectedIndex = 2 Then
' foot
txtUnit2.Text = (dblUnit1 * (1 / 12)).ToString.Trim
ElseIf cbo2.SelectedIndex = 3 Then
' inch
txtUnit2.Text = txtUnit1.Text
End If
End If