我的代码:
int inStock = -3;
product.AVG = 0; // double
receiptIt.Quantity = 3; // int
decimal newPrice = 755.23m;
product.SPD = 79.80m; // decimal
var newAvg = (inStock * (float) product.AVG + (receiptIt.Quantity * (float) newPrice)) / (inStock + receiptIt.Quantity);
var newAvgWithSpd = newAvg + (float) product.SPD;
为什么我的编译程序结果如此?:
newAvg => 0
newAvgWithSpd => Infinity
但在Visual Studio中的立即窗口中,结果符合预期:
newAvg => Infinity
newAvgWithSpd => Infinity
如何在c#中实现这一点?:
var a = -3 * 0 + (3 * 755.23) / (-3 + 3);
var b = a + 79.80;
//Result:
a => 0; // <<=== WHY?
b => Infinity;
我可以在:
重现它但无法重现: - 开发机器(Windows 10 64位,调试版本,Asp.net核心1,使用立即窗口调试)
编辑: newAvg已初始化......
答案 0 :(得分:1)
我怀疑您在Include values
行设置了断点,并且在 之前看到var newAvg = ..
的值已被分配了新的计算结果,即{ {1}}。下一行的newAvg
怎么可能成为Infinity
,因为它是newAvgWithSpd
?
<强>更新强>
评论中提到的代码上下文有
行Infinity
您的断点在这些行之后设置。这解释了为什么newAvg + 79.80f
。