除以零,没有错误?

时间:2017-05-30 09:14:14

标签: c# divide-by-zero

只是把一个简单的测试放在一起,不是出于任何特殊原因,除了我想尝试对我的所有方法进行测试,即使这个方法非常简单,或者我认为。

    [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);
    }

正如您在测试方法中看到的那样,我将其除以零。问题是,它不会产生错误。请参阅下面的错误窗口。

Error List View from VS2017

而不是错误,它给出无穷大的值?我错过了什么?所以我用Google搜索并发现双倍除以零点否则会产生错误,它们会给出无效或无穷大。那么问题是,如何测试Infinity的返回值?

2 个答案:

答案 0 :(得分:77)

仅在整数值的情况下才会有DivideByZeroException

int total = 3;
int numberOf = 0;

var tot = total / numberOf; // DivideByZeroException thrown 

如果至少有一个参数是浮点值(问题中为double),那么你将得到 FloatingPointType.PositiveInfinity ({{ 1}}在上下文中)并且没有异常

double.PositiveInfinity

答案 1 :(得分:6)

您可以查看以下内容

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))
{
    ...
}