Error en una clase para formato de números de punto flotante.
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;
}
}
}
}
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;
}
}
}
}
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
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
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.
Que por cierto me pareció genial y lo recomiendo.
Gracias en verdad.