2017-06-01 43 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

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

謝謝!