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

why is my math resulting in a wrong bool?

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

当我获取 "applicable" 的第一个元素时,我收到一个不应该出现在列表中的元素(我检查结果为 over 14 的元素。然而这个元素得到的结果是 13.975)

主要问题可能是:

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>