2017-06-01 45 views
0

我遇到了一件让我很困惑的事情。这似乎取决于我在哪里维以下字典,我的价值(作为双)被截断。vb.net linq to dictionary rounding error

采取以下代码:

Dim dc As New Generic.Dictionary(Of Integer, Double) 

While Loop 

dc = (From C In dtC.AsEnumerable Where C!ID = .Rows(i).Item("GID") 
    Group C By C!DID Into Group 
    Select DID, DM = 
    Group.Sum(Function(C) CDbl(C!M))).ToDictionary(Function(b) CInt(b.DID), 
    Function(c) c.DM) 

Dim testdc As Generic.Dictionary(Of Integer, Double) = 
(From C In dtC.AsEnumerable Where C!ID = .Rows(i).Item("GID") 
Group C By C!DID Into Group 
Select DID, DM = 
Group.Sum(Function(C) CDbl(C!M))).ToDictionary(Function(b) CInt(b.DID), 
Function(c) c.DM) 

为字典直流的结果是(6,6.3)和(1200,1.9)

对于字典结果testdc是(6,6.3),并(1200,1.85)

原始值显示1.9实际上是dc为1.89999999967,testdc为1.85。

1.85是正确的值。任何人都知道这里发生了什么?

+0

给我们足够的代码执行,你可能会得到答案。 – Joshua

+0

你绝对应该把注意力放在变量名上,使它们更易读懂。特别是在我们没有IDE并且需要实际读取代码的情况下 – Fabio

+0

这些'!'符号是否正确?我从来没有在vb中看到过。 –

回答

0

想通了。代码的另一部分是歪曲值。

谢谢!