2017-08-09 34 views
-3

我計算值超出3個值,使從列表中選擇:爲什麼我的數學導致錯誤的布爾?

var applicable = from b in discounts.ToList() where 
    (b["Interest Rate"].Cast<double>() + 
    (-b["Discount/Premium"].Cast<double>()) + 
    ((-b["Discount/Premium"].Cast<double>())/(b["Term"].Cast<int>()/12))) >= GlobalVar.minRealReturn 
    select b; 

當我採取的第一個元素「適用」我接收這不應該是在列表中(I檢查的元件。超過 14結果元素但這個元素得到了13.975的結果)

enter image description here

+0

是'b'字典嗎? – Dido

+0

不,b是excelsheet中的變量「Row」 使用小數點時我收到errormessage「+'運算符不能與類型decmal和double一起使用我用雙精度代替了所有雙精度值 –

+0

您應該重構代碼以使它更具有可讀性,使用帶有屬性的模型而不是字典需要按名稱查找,然後進行強制轉換。您確定「適用」將始終返回一個值嗎?如果不適用,您將得到一個異常。 – Dido

回答

1

主要的問題可能是:

b["Term"].Cast<int>()/12 

不符合您的想法。

假設b["Term"].Cast<int>()爲18.您可能預計18/12會導致1.5。但事實並非如此。結果爲1 - 因爲您正在執行integer division

因此,您可能需要將代碼更改爲:

b["Term"].Cast<int>()/12D 

因爲這將迫使它使用整數除法。 您也可以將Cast<int>轉換爲Cast<double>

+0

非常感謝!我注意到,我在我的消息箱中投入了兩倍,這導致了正確的價值。 因爲 –

+0

*應用程序是非常時間關鍵的 –