Foros del Web » Programación para mayores de 30 ;) » Java »

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

Estas en el tema de Error en clase para formato de números de punto flotante. en el foro de Java en Foros del Web. 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. ...
  #1 (permalink)  
Antiguo 14/10/2005, 17:54
Avatar de jpunk  
Fecha de Ingreso: octubre-2005
Ubicación: Bogota
Mensajes: 335
Antigüedad: 18 años, 7 meses
Puntos: 0
Error en 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:

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;
			}
		}
	}
}
 
  #2 (permalink)  
Antiguo 15/10/2005, 14:43
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
lo RETURN solo los pones dentro de los IF's , lo cual no es permitido porque pueden no ser alcanzados.
Tienes que ponerlos en un lugar donde SEGURO lo puede alcanzar
  #3 (permalink)  
Antiguo 15/10/2005, 16:10
Avatar de jpunk  
Fecha de Ingreso: octubre-2005
Ubicación: Bogota
Mensajes: 335
Antigüedad: 18 años, 7 meses
Puntos: 0
error en class FormatoDouble

Gracias por responder.

Pero la verdad soy muy novato no puedes ser más especifico con tu respuesta.
  #4 (permalink)  
Antiguo 16/10/2005, 02:44
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
cuando asignas un tipo de "regreso" (return) a una funcion , como por ejemplo VOID, INT, STRING ,etc...., deebes poner un "Return 'tipoDeDato'" donde sea alcanzable.
Por ejemplo, si tienes una funcion asi:

public bool funcion ( bool dato )
{
if ( bool == true )
return true;
else
return false;
}

en este caso, sea cual sea el contenido de "dato" siempre habra un return, pero por ejemplo, si pones algo asi:
public bool funcion ( bool dato )
{
if ( bool == true )
return true;
}

en este caso, es posible que "dato" sea FALSE, por lo tanto, seria IMPOSIBLE que se llegara a algun "return" y no regresaria ningun tipo de dato, entonces habria error de compilacion, ya que cuando indicas que alguna funcion "regresa" algun tipo de dato, tiene que ser posible que lo haga, de lo contrario hay error de compilacion.

Lo mismo pasa en tu programa, ya que es posible que en alguna ocasion NO entre a la seccion donde se regresa el dato (hacer el "return"), por lo tanto, tienes que modificarle para que de alguna manera siempre lo alcance...
  #5 (permalink)  
Antiguo 16/10/2005, 09:17
Avatar de jpunk  
Fecha de Ingreso: octubre-2005
Ubicación: Bogota
Mensajes: 335
Antigüedad: 18 años, 7 meses
Puntos: 0
encontre de donde sacaron el codigo.

Gracias Nuevamente Blakwind

Voy a analizar muy detenidamente el código, se que tienes razón en lo que dices, este código me lo paso un amigo a que le ayudara a encontrar el error, igual a mi también me interesaba tener el código, lo insólito es que pensé que era de autoría de mi amigo pero el lo había sacado el código del libro “1001 TIPS PARA PROGRAMAR CON JAVA” de editorial McGraw-Hill por eso me parece extraño, ya que este libro tiene fama de ser excelente y en verdad que lo es, especialmente para las personas que se inician en este mundo, bueno fui a la biblioteca y saque las copias de aquel libro, el código se encuentra en el TIPS 331 y comparando el código que trascribimos con el del libro esta exactamente igual, no hubo error a copiar el código, lo malo es que no me facilitaron el CD que viene con el libro, para copiarlo pues será muy interesante tenerlo y para verificar el código que viene allí del mismo programa.

Voy a analizarlo de una manera muy detallada y si es necesario me aventurare a sacarlo basándome de ese código, se que tienes razón en lo que dices, además he visto varios post en los que participas y se nota que tienes buen conocimiento en el lenguaje Java, aunque yo hasta ahora estoy comenzando ya empiezo a comprender este lenguaje, y seguiré dándole ya que esto es constancia y ganas de aprender además le estoy cogiendo un gusto a JAVA como a nada.

Byeeeeee.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:41.