我有以下案例
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);
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我在调试中添加了一个quickwatch到一些字段:
beleg.PreisDB == 8.39
beleg.PreisDB??0 == 8.39
beleg.PreisCouponDB == -0.49
beleg.PreisCouponDB??0 == -0.49
Run Code Online (Sandbox Code Playgroud)
而现在奇怪的行为也来自快速观察,当然还有结果
beleg.PreisDB??0 + beleg.PreisCouponDB??0 == 8.39
Math.Round(beleg.PreisDB??0 + beleg.PreisCouponDB??0, 2) == 8.39
gesamtPreis == 8.39
Run Code Online (Sandbox Code Playgroud)
所以添加8.39 + -0.49并没有给我7.9但是8.39这个代码在至少有两个600k的情况下运行我有这种行为,其他人表现得很好.我现在不敢看到我的错误.问题是为什么.net表现得像这样?我正在使用Visual Studio 2015和.net 4.5.2.