<分区>
我有以下案例
beleg.PreisDB = (double?)orders.Where(x => x.orderId == beleg.auftrnr).Sum(x => x.itemPrice + x.shippingPrice + x.giftWrapPrice) ?? 0;
beleg.PreisCouponDB = (double?)orders.Where(x => x.orderId == beleg.auftrnr).Sum(x => x.itemPromotionDiscount + x.shipPromotionDiscount) ?? 0;
var gesamtPreis = Math.Round(beleg.PreisDB??0 + beleg.PreisCouponDB??0, 2);
在我的案例中,我在调试中为某些字段添加了一个快速监视:
beleg.PreisDB == 8.39
beleg.PreisDB??0 == 8.39
beleg.PreisCouponDB == -0.49
beleg.PreisCouponDB??0 == -0.49
现在奇怪的行为也来自 quickwatch,当然还有结果
beleg.PreisDB??0 + beleg.PreisCouponDB??0 == 8.39
Math.Round(beleg.PreisDB??0 + beleg.PreisCouponDB??0, 2) == 8.39
gesamtPreis == 8.39
所以 8.39 + -0.49 的加法不是 7.9 而是 8.39 这段代码在至少两个案例上运行了 60 万个案例,我有这种行为,其他人表现良好。我现在看不到我的错误。问题是为什么 .net 会这样?我将 Visual Studio 2015 与 .net 4.5.2 结合使用。