【发布时间】:2017-10-30 16:27:20
【问题描述】:
只是拼凑了一个简单的测试,除了我喜欢尝试对我所有的方法进行测试之外,没有任何特殊原因,尽管这个测试非常简单,或者我是这么认为的。
[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);
}
正如您在测试方法中看到的那样,我是除以零。问题是,它不会产生错误。请参阅下面的错误窗口显示。
它给出一个无穷大值而不是一个错误?我错过了什么?所以我搜索了一下,发现双精度数除以零不会产生错误,它们要么给出空值,要么给出无穷大。那么问题就变成了,如何测试 Infinity 返回值?
【问题讨论】:
-
是的,
1.0 / 0是double.PositiveInfinity -
C#中有
float.PositiveInfinity和float.NegativeInfinity。 (或double.PositiveInfinity和double.NegativeInfinity) -
整数 尝试除以 0 时会报错,浮点类型不会。
-
float&double与int&long具有不同的行为 - 它具有PositiveInfinity和NegativeInfinity属性,而int和long@8 将抛出 @98765433如果发生除以零。 -
有一个静态的
double.IsInfinity()方法来测试无穷大。
标签: c# double divide-by-zero