Precisión de un double

05/11/2003 - 14:15 por Sergio | Informe spam
Alguien sabe como hacer para que un double solo trabaje con dos decimales?
Lo necesito para comparar un double con otro dentro de un bucle incremental,
y si necesito comprobar toda la parte decimal de cada unidad el ordenador
tarda bastante en pasar de 1 a 2 en el valor de la variable, por ejemplo.
Gracias de antemano.

Preguntas similare

Leer las respuestas

#11 Sergio
12/11/2003 - 12:29 | Informe spam
Mi problema:
{
double tiempobucle,tiempoactual;
double aux;
...
tiempoactual = teleprod.get_CurrentPosition(); //Obtengo la posicion
actual, get_CurrentPosition() es una función del ocx que uso
...
nuevo.tiempo = tiempoactual; // Meto el tiempo actual a una estructura
propia
event.Agregar(nuevo); // Y la añado a una lista dinámica
...
for (tiempobucle = (sector - inicio);tiempobucle < (sector2 -
inicio);tiempobucle += 0.01) { //sector,sector2 e inicio son doubles
aux = tiempobucle;
if (event.IfExists(aux) {...} // la función IfExists() recibe un double y
busca de inicio a fin de la lista el valor del argumento devolviendo
// true o false si la encuentra o
no.
}
...
}
esta es la parte del programa que gestiona el double.
El problema era que IfExists solo devuelve true con valores muy concretos,
como puede ser 0 y algunos más, debido a que yo cuando hacía
nuevo.tiempo = tiempo para el valor 0.01, realmente recibía 0.0099999999, y
cuando usaba IfExists() le paso como argumento 0.0100000000001, cuando
yo solo quiero 0.01, por lo que
Ahora ya tengo la solución, creo, usando tu código:
...
sprintf(cad,"%.2f",tiempoactual);
nuevo.tiempo = atof(cad);
...
for()//Sigue igual
{
sprintf(cad,"%.2f",tiempobucle);
aux = atof(cad);
if(event.IfExists(aux) {...}
}
En este caso me da igual que sea 0.0099999 o 0.01000000, siempre redondea
igual con sprintf, y la conversion de atof() que devuelve 0.01000001, así
que
la comparacion es true.
Creo que con esto tengo mi problema resuelto,
Gracias por todo.
Respuesta Responder a este mensaje
#12 Javier Ariza Ayuso
12/11/2003 - 15:20 | Informe spam
Ok, entonces supongo que así te funcionará...

De nada, pa eso estamos. Un saludo.


"Sergio" escribió en el mensaje
news:
Mi problema:
{
double tiempobucle,tiempoactual;
double aux;
...
tiempoactual = teleprod.get_CurrentPosition(); //Obtengo la posicion
actual, get_CurrentPosition() es una función del ocx que uso
...
nuevo.tiempo = tiempoactual; // Meto el tiempo actual a una estructura
propia
event.Agregar(nuevo); // Y la añado a una lista dinámica
...
for (tiempobucle = (sector - inicio);tiempobucle < (sector2 -
inicio);tiempobucle += 0.01) { //sector,sector2 e inicio son doubles
aux = tiempobucle;
if (event.IfExists(aux) {...} // la función IfExists() recibe un double


y
busca de inicio a fin de la lista el valor del argumento devolviendo
// true o false si la encuentra


o
no.
}
...
}
esta es la parte del programa que gestiona el double.
El problema era que IfExists solo devuelve true con valores muy concretos,
como puede ser 0 y algunos más, debido a que yo cuando hacía
nuevo.tiempo = tiempo para el valor 0.01, realmente recibía 0.0099999999,


y
cuando usaba IfExists() le paso como argumento 0.0100000000001, cuando
yo solo quiero 0.01, por lo que
Ahora ya tengo la solución, creo, usando tu código:
...
sprintf(cad,"%.2f",tiempoactual);
nuevo.tiempo = atof(cad);
...
for()//Sigue igual
{
sprintf(cad,"%.2f",tiempobucle);
aux = atof(cad);
if(event.IfExists(aux) {...}
}
En este caso me da igual que sea 0.0099999 o 0.01000000, siempre redondea
igual con sprintf, y la conversion de atof() que devuelve 0.01000001, así
que
la comparacion es true.
Creo que con esto tengo mi problema resuelto,
Gracias por todo.


Respuesta Responder a este mensaje
#13 Willser F. González C.
14/11/2003 - 22:45 | Informe spam
Una buena opción es convertir los dos valores, con todos sus decimales, a
CString, luego extraer, para cada uno de los CString, con CString::Mid(...),
los decimales que necesite comparar y "Compararlos" usando el CString1 =CString2.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida