除以零,没有错误?
只是扔了一个简单的testing,除了我喜欢尝试所有我的方法testing,即使这是一个非常简单的,所以我想,除了任何特殊的原因。
[TestMethod] public void Test_GetToolRating() { var rating = GetToolRating(45.5, 0); Assert.IsNotNull(rating); } private static ToolRating GetToolRating(double total, int numberOf) { var ratingNumber = 0.0; try { var tot = total / numberOf; ratingNumber = Math.Round(tot, 2); } catch (Exception ex) { var errorMessage = ex.Message; //log error here //var logger = new Logger(); //logger.Log(errorMessage); } return GetToolRatingLevel(ratingNumber); }
正如您在testing方法中看到的那样,我将AM除以零。 问题是,它不会产生错误。 看到下面的错误窗口显示。
不是一个错误,而是一个无限的价值? 我错过了什么?所以我search了一下,发现双除以零不会产生一个错误,他们要么null或无穷大。 那么问题就变成了,如何testingInfinity的返回值呢?
只有在整数值的情况下才会有DivideByZeroException
:
int total = 3; int numberOf = 0; var tot = total / numberOf; // DivideByZeroException thrown
如果至less有一个参数是一个浮点值(问题中为double
),那么将会有FloatingPointType.PositiveInfinity ( double.PositiveInfinity
中的double.PositiveInfinity
),并且不会有exception
double total = 3.0; int numberOf = 0; var tot = total / numberOf; // tot is double, tot == double.PositiveInfinity
你可以检查下面
double total = 10.0; double numberOf = 0.0; var tot = total / numberOf; // check for IsInfinity, IsPositiveInfinity, // IsNegativeInfinity separately and take action appropriately if need be if (double.IsInfinity(tot) || double.IsPositiveInfinity(tot) || double.IsNegativeInfinity(tot)) { ... }