c# - una - Dividir por error cero, ¿cómo puedo solucionar esto?
tipos de excepciones en c# (10)
C novicio aquí, cuando el int ''max'' a continuación es 0 obtengo un error de división por cero, puedo ver por qué sucede esto, pero ¿cómo debo manejar esto cuando max es 0? posición es también un int.
private void SetProgressBar(string text, int position, int max)
{
try
{
int percent = (100 * position) / max; //when max is 0 bug hits
string txt = text + String.Format(". {0}%", percent);
SetStatus(txt);
}
catch
{
}
}
Bueno, eso depende completamente del comportamiento que quieras. Si el valor máximo de la barra de programa es cero, ¿está lleno? ¿Está vacío? Esta es una opción de diseño, y cuando haya elegido, simplemente pruebe para max == 0 y despliegue su respuesta.
Bueno, si max es cero, entonces no hay progreso por hacer. Intente capturar la excepción a la que se llama esto. Ese es probablemente el lugar para decidir si hay un problema o si la barra de progreso debe establecerse en cero o al 100%.
Compruebe por cero.
if ( max == 0 ) {
txt = "0%";
} else {
// Do the other stuff....
Convierta su
int percent = (100 * position) / max;
dentro
int percent;
if (max != 0)
percent = (100 * position) / max;
else
percent = 100; // or whatever fits your needs
Este no es un problema de C #, es un problema de matemáticas. La división por cero no está definida. Tenga una declaración if que verifique si max> 0 y luego solo ejecute su división.
Necesitarías una cláusula de guardia que verificara max == 0.
private void SetProgressBar(string text, int position, int max)
{
if(max == 0)
return;
int percent = (100 * position) / max; //when max is 0 bug hits
string txt = text + String.Format(". {0}%", percent);
SetStatus(txt);
}
También podría manejar la excepción Divide by Zero, como se muestra en la muestra, pero generalmente es más costoso manejar excepciones y luego establecer cheques para valores erróneos conocidos.
Si está utilizando esto para descargar, probablemente desee mostrar 0% ya que supongo que max == 0 en este caso cuando aún NO CONOCE el tamaño del archivo.
int percent = 0;
if (max != 0)
...;
Si está utilizando esto para alguna otra tarea larga, me gustaría asumir el 100%
Pero también, dado que la posición nunca puede estar entre 0 y -1, por lo que probablemente querrás soltar los 100 *
Supongo que la pregunta de raíz es: ¿Tiene sentido llamar incluso a esta función donde max es ''0''? En caso afirmativo, le agregaría un manejo especial, es decir:
if (max == 0)
{
//do special handling here
}
else
{
//do normal code here
}
Si 0 no tiene sentido, investigaría de dónde viene.
int percent = 0
if (max != 0) percent = (100*position) / max
- Puedes lanzar una excepción.
- Puedes hacer
int percent = ( max > 0 ) ? (100 * position) / max : 0;
int percent = ( max > 0 ) ? (100 * position) / max : 0;
- Puede optar por no hacer nada en lugar de asignar un valor al porcentaje.
- muchas, muchas otras cosas ...
Depende de lo que quieras.