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

[ayuda] problema con doubles en java

Estas en el tema de [ayuda] problema con doubles en java en el foro de Java en Foros del Web. Hola a todos! Mi problema es el siguiente: He creado un programa y funciona todo perfectamente, pero al tener que comparar 2 doubles, en un ...

  #1 (permalink)  
Antiguo 31/03/2009, 01:50
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
[ayuda] problema con doubles en java

Hola a todos!

Mi problema es el siguiente:

He creado un programa y funciona todo perfectamente, pero al tener que comparar 2 doubles, en un if, me dice que 382.0 es mas grande que 411.8 y no entiendo el por qué.
Aquí va el código:

Código:
	System.out.println(ninc1+" "+incremento10);
	if (ninc1>=(incremento10)&&existir!=-1)
	{
		mostrar(taulaCotizaciones,i);
	}
Les explico, es un ejercicio para la universidad de simular una especie de borsa.
En ninc1=382.0 y el incremento10=411.8.

A ver si alguien ve cual es mi error.
Gracias.
  #2 (permalink)  
Antiguo 31/03/2009, 03:50
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: [ayuda] problema con doubles en java

Wenas

No le veo ningun error, pero haz la prueba a comparar los dos double con el metodo compareTo de la clase Double.

Código:
Double d1 = new Double(inc1);
Double d2 = new Double (incrementeo10);

if (d1.compareTo(d2)>=0)
     mostrar(taulaCotizaciones,i);
Saludos.
  #3 (permalink)  
Antiguo 31/03/2009, 05:23
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

Gracias elAntonie pero no me ha funcionado :(
  #4 (permalink)  
Antiguo 31/03/2009, 05:50
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [ayuda] problema con doubles en java

Podrías poner:
a. Más código: En concreto podrías poner donde declaras y lees ninc1 e incremento10?
b. Lo que sale en el s.o.print: Podrías poner exactamente qué es lo que saca ese System.out.print que tienes? Podrías añadir otro ahí mismo que saque System.out.print(ninc1 - incremento10) y decir qué sale?
  #5 (permalink)  
Antiguo 31/03/2009, 08:20
Avatar de Wayern  
Fecha de Ingreso: septiembre-2008
Ubicación: Aguascalientes
Mensajes: 65
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: [ayuda] problema con doubles en java

Hola.
¿Cuál es el valor que tiene la variable existir?
  #6 (permalink)  
Antiguo 31/03/2009, 08:58
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: [ayuda] problema con doubles en java

Da igual el valor de la variable existir.... Por que esta entrando por el if verdad??

o no??
  #7 (permalink)  
Antiguo 31/03/2009, 12:40
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

No puede ser por culpa del existir porque siempre es diferente de -1 en el caso que os he puesto arriba y tampoco funcionaba antes de ponerlo.

Código:
int numero1=0,numero2=0,nvalorI1=0,existir=-1;
	double tantoporciento=0,ninc1=0,incremento10=0;
	String valor1=taulaCotitzaciones[i][2];
	String nombre1=taulaCotitzaciones[i][0];
	String valorI1=taulaCotitzaciones[i][1];
	String inc1=taulaCotitzaciones[i][3];
	String maxDec1=taulaCotitzaciones[i][5];
	String maxInc1=taulaCotitzaciones[i][4];
	valorI1.trim();
	valorI1.replaceAll(" ","");
	nvalorI1=Integer.parseInt(valorI1);
	inc1.trim();
	inc1.replaceAll(" ","");
	ninc1=Integer.parseInt(inc1);
	boolean ex=false;
	Double d1 = new Double(inc1);
	Double d2 = new Double (incremento10);

	for (i=0;i<posicion;i++)
	{
		ex=taulaCotitzaciones[i][0].equals(nombre1);
		if (ex)
		{
			existir=i;
			break;
		}
	}
	incremento10=nvalorI1*0.1;
	if (d1.compareTo(d2)<0&&existir!=-1)
	{
		mostrar(taulaCotitzaciones,i);
	}
Esto es el resto del codigo de la función. El for que hay antes del if comprueba si existe algun campo con el mismo nombre que el nombre1.

Última edición por makh16; 01/04/2009 a las 11:02
  #8 (permalink)  
Antiguo 31/03/2009, 13:23
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [ayuda] problema con doubles en java

¿Puedes poner la siguiente línea...

Código Java:
Ver original
  1. System.out.print("d1: " + d1 + "\nd2: " + d2 + "\ncomparación:" + d1.compareTo(d2));

...justo antes del if y poner aquí exactamente lo que sale?


Por otra parte, ¿te has fijado lo que haces con los tipos de números? Estás haciendo un Integer.parseInt para luego asignarlo a un double (o a un Double). No tiene mucho sentido eso. Vas a perder los decimales al hacer el parseInt.
  #9 (permalink)  
Antiguo 31/03/2009, 13:50
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

d1: 382.0
d2: 411.8
comparación:-1
acme 4118 4500 382 382 0
d1: 1875.0
d2: 235.3
comparación:1
acer 2353 4228 1875 1875 0
d1: -1056.0
d2: 528.4
comparación:-1
verisign 5284 4228 -1056 0 1056
no me deberian aparecer ni verisign ni acme al escribir.
Ya se que no esta muy bien lo de la conversion pero lo hice para hacer una prueba porque de la otra forma tampoco me funcionaba.

Gracias por vuestra ayuda.
  #10 (permalink)  
Antiguo 31/03/2009, 14:02
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: [ayuda] problema con doubles en java

esto dice en la documentacion

compare

public static int compare(double d1, double d2)
Compares the two specified double values. The sign of the integer value returned is the same as that of the integer that would be returned by the call:

new Double(d1).compareTo(new Double(d2))

Parameters:d1 - the first double to compare
d2 - the second double to compare

Returns:
the value 0 if d1 is numerically equal to d2; a value less than 0 if d1 is numerically less than d2; and a value greater than 0 if d1 is numerically greater than d2.

solo cambia el < por un >

Saludos

Última edición por drac94; 31/03/2009 a las 14:10
  #11 (permalink)  
Antiguo 31/03/2009, 14:07
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

he cambiado el < por el > pero sigue mostrandome lo mismo y no lo entiendo, como tu as dicho lo logico seria que no saliesen ya verisign y acme.
  #12 (permalink)  
Antiguo 01/04/2009, 03:26
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: [ayuda] problema con doubles en java

comparacion y acme se pintan por que llama al metodo mostar(taula....) verdad?? es decir entras por el if.

Si es asi el if para que sea igual que lo tenias tu tendria que ser :

Código:
if (d1.compareTo(d2)>=0 && existir!= -1)
Cambiala por:

Código:
if (d1.compareTo(d2)>=0)
No vaya a ser que estes cambiando el existir en algun momento y no te des cuenta.
  #13 (permalink)  
Antiguo 01/04/2009, 07:08
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

lo he provado sin el existir pero nada siguen saliendo los 3.
  #14 (permalink)  
Antiguo 01/04/2009, 08:10
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: [ayuda] problema con doubles en java

Sigue entrando por el if?? Es decir, d1 >= d2??

Pon otra vez las trazas
  #15 (permalink)  
Antiguo 01/04/2009, 08:10
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [ayuda] problema con doubles en java

Veámoslo por otro lado... ¿Puedes poner qué es lo que hace la función mostrar? (El código, si no es muy largo)
  #16 (permalink)  
Antiguo 01/04/2009, 08:38
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

El código del mostrar es el siguiente:

Código:
int longi1=0,longi2=0,longi3=0,longi4=0,longi5=0,longi6=0;
	String espacios1,espacios2,espacios3,espacios4,espacios5;
	String nombreEmpresa,valorInicial,valorActual,incrementoTotal,maxInc,maxDec;
	nombreEmpresa=taulaEmpresas[posicion][0];
	valorInicial=taulaEmpresas[posicion][1];
	valorActual=taulaEmpresas[posicion][2];
	incrementoTotal=taulaEmpresas[posicion][3];
	maxInc=taulaEmpresas[posicion][4];
	maxDec=taulaEmpresas[posicion][5];
	longi1=nombreEmpresa.length();
	longi2=valorInicial.length();
	longi3=valorActual.length();
	longi4=incrementoTotal.length();
	longi5=maxInc.length();
	longi6=maxDec.length();
	espacios1=Empresa.espacios(longi1);
	espacios2=Empresa.espacios(longi2);
	espacios3=Empresa.espacios(longi3);
	espacios4=Empresa.espacios(longi4);
	espacios5=Empresa.espacios(longi5);
system.out.println(nombreEmpresa+espacios1+valorInicial+espacios2+valorActual+espacios3+incrementoTotal+espacios4+maxInc+espacios5+maxDec);
  #17 (permalink)  
Antiguo 01/04/2009, 09:19
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [ayuda] problema con doubles en java

Nota: Cuando pongas el código de una función o método, por favor, ponlo entero. Es decir, también con la firma de la función (public int mostrar(String[][] tabla, int posicion) { ... } o lo que corresponda). De otra forma el código no se sigue correctamente.


Ahora, volviendo un momento al código anterior (no al de mostrar()), ¿de dónde sale el i de String nombre1=taulaCotitzaciones[i][0]; (entre otras, todas las asignaciones del principio)? ¿De dónde sale posicion?

¿Y por qué está:
Código:
Double d2 = new Double (increment10);
antes de hacer la asignación de:
Código:
incremento10=nvalorI1*0.1;
?
  #18 (permalink)  
Antiguo 01/04/2009, 09:28
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: [ayuda] problema con doubles en java

venkman, se supone que i es posicion en el metodo mostrar, no obstante tiene toda la razon al decir que debes poner el codigo entero, con la declaracion.

De todos modos en las trazas es indiferente el valor de i ya que cada vez la empresa es distinta.

Tambien es indiferente el que increment10 se modifique despues de asignarlo a d2 porque la traza que esta sacando es d2.

Solo como observacion, y aunque parezca idiota, estas seguro que estas compilando este codigo?? Te esta generando un nuevo class??

Porque si estas ejecutando :

if (d1.compareTo(d2)>=0)
mostrar(taulaCotizaciones,i);

deberia entrar unas veces si y otras no.

Porque no le veo ningun sentido.
  #19 (permalink)  
Antiguo 01/04/2009, 09:37
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

@venkman La i y el posicion vienen de la firma. Respecto a la otra pregunta, mi programa debe mostrar el nombre de la empresa, su valor inicial, el valor actual, el incremento total, maximo incremento y maximo decremento.
El primer valor, el d1 es el incremento total y el incremento10, es porque solo debe mostrar las empresas que el 10% del valor inicial sea menor que el incremento total.

Todos los valores salen de una tabla de strings(taulaCotizaciones) donde guardo todas las empresas.

@elAntonie compila i no me salta ningun error por eso colgué la pregunta aquí porque despues de mirarlo y mirarlo no encuentro razón alguna porque no funcione.
  #20 (permalink)  
Antiguo 01/04/2009, 09:46
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: [ayuda] problema con doubles en java

No, no me has entendido, no quiero decir que no compile sino que el fichero class se genera de nuevo cada vez que compilas. Es que segun tus trazas deberia entrar en el if unas veces y otras no.
  #21 (permalink)  
Antiguo 01/04/2009, 10:20
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

como puedo verlo si se genera cada vez que compilo? uso el eclipse.
  #22 (permalink)  
Antiguo 01/04/2009, 10:43
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [ayuda] problema con doubles en java

Mmm... no sé si me habéis entendido...

En el código inicial tenemos...

Código:
//...
	String valor1=taulaCotitzaciones[i][2];
	String nombre1=taulaCotitzaciones[i][0];
	String valorI1=taulaCotitzaciones[i][1];
//...
Y luego hay
Código:
	for (i=0;i<posicion;i++)
	{
//...
Y más tarde, después del for que modifica el valor de i, tenemos
Código:
mostrar(taulaCotitzaciones,i);
con la misma i todo ello. ¿Lo vais siguiendo? ¿Aún os parece irrelevante i?



Por otro lado mi pregunta sobre d2 e incremento10 tiene un poco de trampa y un poco de relación con la "pregunta tonta" de elAntonie. Porque no sé si lo habréis notado pero pone increment10 en un lado e incremento10 en otro. Así que me pregunto: makh16 ¿realmente es este el código que estás compilando? ¿Lo estás copiando aquí correctamente? Porque... en fin...
  #23 (permalink)  
Antiguo 01/04/2009, 11:01
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

Lo del increment10 ya esta corregido a incremento10 me lo deje al ponerlo aquí sorry. Lo de la i lo he estado mirando y me parece que ya entiendo que quieres decir. Pero he provado con poner en vez de la i, una j en el for para ver que pasaba y me sigue mostrando los 3:

NombreEmpresa ValorInicial ValorActual IncrementoTotal MaxInc MaxDec
acme 4118 4500 382 382 0
acer 2353 4228 1875 1875 0
verisign 5284 4228 -1056 0 1056

Es eso lo que querias decir venkman? que cambiara la variable del for?

Última edición por makh16; 01/04/2009 a las 11:09
  #24 (permalink)  
Antiguo 01/04/2009, 11:29
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: [ayuda] problema con doubles en java

pues ya asi de a ultimas ponle un breakpoint y le agregas un watch a toda la expresion

Código PHP:
d1.compareTo(d2)>0&&existir!=-
y te fijas si sale falso o verdadero
  #25 (permalink)  
Antiguo 01/04/2009, 12:01
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [ayuda] problema con doubles en java

Cita:
Iniciado por makh16 Ver Mensaje
Es eso lo que querias decir venkman? que cambiara la variable del for?
No sólo eso, makh16, también quería decir que pusieras aquí el código que estás usando tal cual lo estás usando y entero. Porque si no, es bastante complicado seguirte (además de estúpidamente frustrante).
  #26 (permalink)  
Antiguo 02/04/2009, 02:03
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: [ayuda] problema con doubles en java

Cita:
Iniciado por makh16 Ver Mensaje
como puedo verlo si se genera cada vez que compilo? uso el eclipse.
Pues como va a ser, te vas a donde tengas el class y miras la fecha de creacion.

venkman tiene toda la razon, esto es bastante frustrante. Se esta volviendo una cuestion de amor propio.

Saludos.
  #27 (permalink)  
Antiguo 02/04/2009, 02:37
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

he mirado la fecha de creación y está correcta...
  #28 (permalink)  
Antiguo 02/04/2009, 03:35
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: [ayuda] problema con doubles en java

Cita:
Iniciado por drac94 Ver Mensaje
pues ya asi de a ultimas ponle un breakpoint y le agregas un watch a toda la expresion

Código PHP:
d1.compareTo(d2)>0&&existir!=-
y te fijas si sale falso o verdadero
Es verdadero porque siempre entra por el if. Nada, no se me ocurre nada mas. Pon el codigo COMPLETO, por favor.

Me creare una clase a ver que me da y te comento.

Saludos.
  #29 (permalink)  
Antiguo 02/04/2009, 11:28
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: [ayuda] problema con doubles en java

es que no puede ser que siempre entre por el if, eso seria un error muy grave del compilador y no lo es xq yo ya hice una prueba con esa misma instruccion y solo entra cuando las 2 comparaciones son verdaderas, entonces si es que siempre entar por el if las 2 deberian ser verdaderas, por eso sugeri que le pusiera un watch y viera que daba d1.compareTo(d2)>0 y existir!=-1 para que revisara por que son siempre verdaderas las 2 y desde alli partir nuevamente con la solucion del problema
  #30 (permalink)  
Antiguo 03/04/2009, 01:22
 
Fecha de Ingreso: enero-2009
Mensajes: 213
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] problema con doubles en java

Aquí va el código:

Código:
private static void ordenar10valorInicial(String [][] taulaCotitzaciones,int i,int posicion)
{
	int numero1=0,numero2=0,nvalorI1=0,j=0;
	double tantoporciento=0,ninc1=0,incremento10=0;
	String valor1=taulaCotitzaciones[i][2];
	String nombre1=taulaCotitzaciones[i][0];
	String valorI1=taulaCotitzaciones[i][1];
	String inc1=taulaCotitzaciones[i][3];
	String maxDec1=taulaCotitzaciones[i][5];
	String maxInc1=taulaCotitzaciones[i][4];
	valorI1.trim();
	valorI1.replaceAll(" ","");
	nvalorI1=Integer.parseInt(valorI1);
	inc1.trim();
	inc1.replaceAll(" ","");
	ninc1=Integer.parseInt(inc1);
	int existir=-1;
	boolean ex=false;
	incremento10=nvalorI1*0.1;
	Double d1 = new Double(inc1);
	Double d2 = new Double (incremento10);

	for (j=0;j<posicion;j++)
	{
		ex=taulaCotitzaciones[j][0].equals(nombre1);
		if (ex)
		{
			existir=j;
			break;
		}
	}
	incremento10=nvalorI1*0.1;
	//System.out.print("d1: " + d1 + "\nd2: " + d2 + "\ncomparación:" + d1.compareTo(d2));
	if (d1.compareTo(d2)>0&&existir!=-1)
	{
		mostrar(taulaCotitzaciones,i);
	}
}
Gracias.
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 13:07.