viernes, 22 de julio de 2011

Festival del Humor (II)

¿Como saber que un número es cero? Muy sencillo

public boolean EsCero(BigDecimal numeroDecimal){

String numero = numeroDecimal.toString();
int i = 0;
boolean numeroEsCero = true;

// Se ha tenido que hacer esta validacion de un número porque el equals
// y el compareTo del BigDecimal no tienen en cuenta
// el número de decimales, ya que no es lo mismo 0.0 que 0.0000
// Lo que hacemos es pasarlo a un string
// y comprobar que en el número viene algun dígito del 1 al 9
while(i < numero.length() && numeroEsCero) {
if("123456789".indexOf(numero.charAt(i)) != -1) {
numeroEsCero = false;
} else {
i++;
}
}
return numeroEsCero
}

Sobran las palabras, como ya sabéis la seccion de festival del humor está basada en hechos reales ;)
Lo cierto, es que en la realidad no está en una función y este codigo utiliza el patrón copy/paste cada vez que es necesario realizar esta comprobación.

4 comentarios:

  1. Interesante... 0.0 é distinto de 0.0000.
    E está claro que non se lle ocurriu unha forma máis rebuscada de comprobar se un carácter é un '0' ou non!
    O mundo está cheo de incomprendidos...

    ResponderEliminar
  2. Lo más gracioso de este caso,
    no es que se haya reiventando la rueda,
    no es que la rueda que se ha inventado sea triangular,
    lo más gracioso, es crearla pensando que nadie antes tuvo una necesidad parecida :S

    ResponderEliminar
  3. Es gracioso que el sujeto se haya documentado tan concienzudamente como para saber que equals en BigDecimal tiene en cuenta la escala del número y sin embargo no se haya molestado en ver que compareTo la ignora y, por tanto, podría usarlo para saber si es 0 (entre otras muchas soluciones posibles).

    ResponderEliminar
  4. Por certo, o toString() de BigDecimal para un número que é 0, devolve "0" sempre ou podería devolver "0.0", "0.00", etc...
    Porque se é este último caso, entonces esa función NON funciona, xa que o indexOf da cadea devolverá -1 para o carácter '.'...

    ResponderEliminar