添加Double值不一致

Sta*_*tch 4 .net c# vb.net

我在使用eval(...)实现开发一些工程规则值引擎时遇到了以下问题.

    Dim first As Double = 1.1
    Dim second As Double = 2.2
    Dim sum As Double = first + second
     If (sum = 3.3) Then
        Console.WriteLine("Matched")
    Else
        Console.WriteLine("Not Matched")
    End If
Run Code Online (Sandbox Code Playgroud)

'以上条件返回false,因为sum的值是3.3000000000000003而不是3.3

它看起来像是第15位是往返的.有人可能会给出更好的解释.

Math.Round(...)只有解决方案可用吗?还有其他东西我也可以尝试?

Ode*_*ded 8

你没有添加小数 - 你加起来是双打.

并非所有双打都可以在计算机中准确表示,因此出错.我建议阅读这篇文章的背景(每个计算机科学家应该知道的关于浮点算术的内容).

请改用Decimal类型,它不会遇到这些问题.

Dim first As Decimal = 1.1
Dim second As Decimal = 2.2
Dim sum As Decimal= first + second
 If (sum = 3.3) Then
    Console.WriteLine("Matched")
Else
    Console.WriteLine("Not Matched")
End If
Run Code Online (Sandbox Code Playgroud)


Eug*_*gen 1

这就是双数在 PC 中的工作原理。比较它们的最好方法是使用这样的结构

if (Math.Abs(second - first) <= 1E-9)
 Console.WriteLine("Matched")
Run Code Online (Sandbox Code Playgroud)

相反,如果1E-9您可以使用另一个数字,这将代表比较中可能出现的错误。