为什么我的数学导致错误的布尔?
问题描述:
我计算值超出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的结果)
答
主要的问题可能是:
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
*应用程序是非常时间关键的 –
是'b'字典吗? – Dido
不,b是excelsheet中的变量“Row” 使用小数点时我收到errormessage“+'运算符不能与类型decmal和double一起使用我用双精度代替了所有双精度值 –
您应该重构代码以使它更具有可读性,使用带有属性的模型而不是字典需要按名称查找,然后进行强制转换。您确定“适用”将始终返回一个值吗?如果不适用,您将得到一个异常。 – Dido