为什么我的数学会导致错误的布尔值?
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>
。
我从 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>
。