2017-08-09 68 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

*应用程序是非常时间关键的 –

相关问题