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