Error en una clase para formato de números de punto flotante.

juan punk
16 de Octubre del 2005
Hola Alguien me puede ayudar a encontrar un error en esta clase para formato de números de punto flotante.
El error es: missing return statement.

Aquí agrego el código:


public class FormatoDouble {

public static String toString(double valor, int precision)
{
return toString(valor, precision, false);
}

public static String toString(double valor, int precision, boolean usar_coma)
{
boolean cero_derecha;
double val_abs = Math.abs(valor); // Convertir a positivo

if(precision < 0)
{
precision = -precision;
cero_derecha = false;
}

else
{
cero_derecha = true;
}

String signoStr = "";


if(valor < 0)
{
signoStr = "-";
}

long digito = (long) Math.floor(val_abs); // da la parte entera


String digitoStr = String.valueOf(digito);

if(usar_coma)
{
int longDigitoStr = digitoStr.length();
int indice_dig = (longDigitoStr - 1) % 3;

indice_dig++;

String digitoComaStr = digitoStr.substring(0, indice_dig);

while(indice_dig < longDigitoStr)
{
digitoComaStr += "," + digitoStr.substring(indice_dig, indice_dig+3);

indice_dig += 3;
}

digitoStr = digitoComaStr;
}

String digitoPrecStr = "";

long digitoPrec = Math.round( (val_abs - digito) * Math.pow(10.0, precision) );

digitoPrecStr = String.valueOf(digitoPrec);

// LLenar con ceros entre el decimal y los digitos de la precision
String llenarCero = "";

for(int i = 0; i < precision-digitoPrecStr.length(); i++ )
{
llenarCero += "0";
}

digitoPrecStr = llenarCero + digitoPrecStr;


if(! cero_derecha)
{
int ultimoCero;

for(ultimoCero = digitoPrecStr.length() - 1; ultimoCero >= 0; ultimoCero--)
{
if( digitoPrecStr.charAt(ultimoCero) != '0' )
{
break;
}

digitoPrecStr = digitoPrecStr.substring(0, ultimoCero + 1);
}

if( digitoPrecStr.equals("") )
{
return signoStr + digitoStr;
}

else
{
return signoStr + digitoStr + "." + digitoPrecStr;
}
}
}
}

miguelAngel
16 de Octubre del 2005
El problema esta en esta porción del código

if( digitoPrecStr.equals("") )
{
return signoStr + digitoStr;
}

else
{
return signoStr + digitoStr + "." + digitoPrecStr;
}


que deberias ponerla como

if( digitoPrecStr.equals("") )
{
return signoStr + digitoStr;
}

return signoStr + digitoStr + "." + digitoPrecStr;


la razón es sencilla. El else no es necesario porque
un método finaliza cuando encuentra una sentencia return, por tanto en el caso tuyo, si se cumple la comdición del último if acabará y no seguirá ejecutando. y si no se cumple acabará en el último con el ultimo return

Saludos

juan punk
16 de Octubre del 2005
Hey muchas gracias Miguel Angel casi me rompo la cabeza tratando de encontrar el error, la verdad soy novato y este código me lo paso un amigo que lo estaba transcribiendo del Libro de 1001 Tips para programar en Java, el tips es 331.
Que por cierto me pareció genial y lo recomiendo.
Gracias en verdad.