为什么我的数学导致错误的布尔?

时间:2017-08-09 11:56:30

标签: c# linq if-statement double linq-to-excel

我从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;

当我接受“适用”的第一个元素时,我收到一个不应该在列表中的元素(我检查结果超过 14的元素。但是这个元素得到的结果是13.975)

enter image description here

1 个答案:

答案 0 :(得分: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>