c# divide-by-zero

c# - ¿Dividir por cero y sin error?



divide-by-zero (2)

Puedes marcar como abajo

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

Esta pregunta ya tiene una respuesta aquí:

Simplemente combiné una prueba simple, no por una razón en particular que no sea la que me gusta tratar de realizar todos mis métodos a pesar de que este es bastante sencillo, o eso pensé.

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

Como se puede ver en el método de prueba, YO SOY dividiendo por cero. El problema es que no genera un error. Vea la ventana de error que se muestra a continuación.

¿En lugar de un error está dando un valor de infinito? ¿Qué me estoy perdiendo? Así que busqué en Google y descubrí que los dobles divididos por cero NO generan un error, ya sea que dan un valor nulo o infinito. La pregunta es, entonces, ¿cómo se prueba uno para un valor de retorno de infinito?


Va a tener la DivideByZeroException solo en el caso de valores enteros :

int total = 3; int numberOf = 0; var tot = total / numberOf; // DivideByZeroException thrown

Si al menos un argumento es un valor de punto flotante ( double en la pregunta), tendrá como resultado FloatingPointType.PositiveInfinity como resultado ( double.PositiveInfinity en el contexto) y ninguna excepción

double total = 3.0; int numberOf = 0; var tot = total / numberOf; // tot is double, tot == double.PositiveInfinity