vb.net中的双精度除法是错误的

vb.net中的双精度除法是错误的,vb.net,algorithm,Vb.net,Algorithm,我在vb.net程序中使用此函数 Public Function getmeter(ByVal metersize As Double) As Double Dim result As Double Dim remain As Double = metersize / size SplitDouble(remain) result = Calcuatedemeter(cartons, plateNum) Retur

我在vb.net程序中使用此函数

Public Function getmeter(ByVal metersize As Double) As Double
        Dim result As Double
        Dim remain As Double = metersize / size
        SplitDouble(remain)
        result = Calcuatedemeter(cartons, plateNum)

        Return result
    End Function
而我给了这个价值 metersize=1365.28 尺寸=1.61 结果应该是848,我在我的计算器和谷歌计算器和duckduckgo计算器中的sci计算器中测试它,但在vb.net中,它向我显示847.99999为什么会这样

这是计算器

 Private Function Calcuatedemeter(ByVal cartonnumber As Integer, ByVal platenumber As Integer) As String
        Dim result As String = ""
        Dim sb As New System.Text.StringBuilder()
        If cartonnumber > 0 Then
            sb.Append(cartonnumber)
            sb.Append(" Carton  ")
        End If
        If Not platenumber = 0 And cartonnumber > 0 Then
            sb.Append(" و  ")
        End If

        If platenumber > 0 Then
            sb.Append(" " & platenumber & " Peace ")
        End If
        result = sb.ToString

        Return result
    End Function
并使用此函数从数据库中获取值

Function getInfoceramic(ByVal gsize As Double, ByVal gcarton As Integer, ByVal gname As String, ByVal gwidth As Double, ByVal glength As Double) As Double
    size = CDbl(gsize)
    cartonpak = gcarton
    name = gname
    width = gwidth
    length = glength
    platesize = (width / 100) * (length / 100)


End Function

这是由于双值的性质,它们不是存储为精确值,而是存储为非精确近似值

这是非常清楚的,相关错误请参见:


如果你知道你只处理小数点后2位,你可以使用整数并将其乘以100,然后在你想输出值时只除以100。

假设它只会是小数点后2位是一个很大的信念飞跃…@user2366842这就是为什么我没有假设,我说如果,我给出了一个有条件的场景,基于提供的数据是小数点后两位这一事实。可能有用,可能没有,但我没有说假设您处理的是小数点后2位。也就是说,如果明天下雨,我就穿件外套,我并不认为明天会下雨,是吗?我不能使用舍入函数,因为一段时间内,如果有剩余的话,剩余的将被计算为碎片。这个函数在我所有的计算中运行良好,只有在这个值中,它给了我像ma,因为有更多的值。SplitDouble-这是什么。这是什么?您没有向我们显示所有代码如果我将Dim结果设置为Double=1365.28/1.61,则结果为848,正如预期的那样。代码中出现了一些你没有显示给我们的情况。嘿@Alex我不知道为什么会发生在我这里它给我847.9999999不应该是848,在我的客户端pc中也有相同的结果。我已经添加了更多的代码,如果您需要精度,请使用Decimal数据类型。