C#.net核心如何在除以零时给出结果= 0?

时间:2018-02-02 13:26:54

标签: c# .net .net-core

我的代码:

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 server 2016,发布版本,Asp.net核心1)
  • 开发机器(Windows 10 64位,Debug构建,Asp.net核心1,带断点的调试)

enter image description here

但无法重现:   - 开发机器(Windows 10 64位,调试版本,Asp.net核心1,使用立即窗口调试)

enter image description here

enter image description here

编辑: newAvg已初始化......

1 个答案:

答案 0 :(得分:1)

我怀疑您在Include values行设置了断点,并且在 之前看到var newAvg = .. 的值已被分配了新的计算结果,即{ {1}}。下一行的newAvg怎么可能成为Infinity,因为它是newAvgWithSpd

<强>更新

评论中提到的代码上下文有

Infinity

您的断点在这些行之后设置。这解释了为什么newAvg + 79.80f