Visual Basic .Net舍入问题

时间:2013-11-19 23:46:18

标签: vb.net visual-studio-2012

我正在使用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

4 个答案:

答案 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)

如果您想要舍入结果,请使用Math.Round

Console.WriteLine(Math.Round(12 * 0.0833333))

打印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