Acerca De La Precisión En Decimales (SOLUCIONADO)


Objetivo: Acerca De La Precisión En Decimales (SOLUCIONADO)
Buenos días,

Explico brevemente el problema y luego la duda:

Tengo un algoritmo que genera unos códigos, que están compuestos de distintos strings concatenados y unos números convertidos a string que también se concatenan.
Los códigos tienen que tener siempre la misma longitud, hasta aquí todo bien.

La cuestión es que a veces cuando el algoritmo genera los números que se concatenan en el código me da un error de lo siguiente:

Al algoritmo le paso un valor (supongamos 3.80), el cual se lo paso como una variable "pr" de tipo float.

Cuando tomo la parte entera con
CString(Fix(pr))
me devuelve 3, lo cual está bien;

Pero cuando hago
CString(Frac(pr))
, me devuelve 0.800000000000001

Allí está mi problema (debería ser 0.8), tengo que editar a mano sacando ceros y demás. Y no puedo simplificar a que redondee a dos decimales porque hay casos que tienen tres y casos que tienen uno...

Cstring(pr) me da 3.8 lo cual también está bien...

Alguien tiene una idea de para dónde puedo rumbear? Será algo interno del intérprete?

Muchas gracias desde ya!

última edición por santijav el Lunes, 26 Diciembre 2011, 17:40; editado 1 vez
Perfil MP  
Objetivo: Re: Acerca De La Precisión En Decimales
Para el tema de decimales puede ocupar Round y darles el numero decimales que quieres ocupar para esa variable, espero que sea de ayuda.

última edición por gara_pm el Jueves, 22 Diciembre 2011, 20:17; editado 1 vez
Perfil MP  
Objetivo: Re: Acerca De La Precisión En Decimales
Si no me queda otra solución aumentaré la cantidad de análisis para generar el código y usaré el round. Trato de evitar esto ya que hay algunos casos en que los decimales son 3 y otras veces 2. Quizás lo más sencillo sea redondear siempre a 3 decimales y listo.

Acabo de probar y hay casos en los que esto no funciona... la verdad que estoy confundido...

Perfil MP  
Objetivo: Re: Acerca De La Precisión En Decimales
El tema es que sin el codigo fuente de tu programa o lo que quiere hacer no te puedo ayudar mucho. saludos.

Perfil MP  
Objetivo: Re: Acerca De La Precisión En Decimales
Estuve probando con algo sencillo.

Prueba esto en gambas:

Print CString(Frac(5.025))


A mi me imprime por consola: 0.0250000000000004

Y debería ser 0.025... Esto es el error que me acontece en mi función.

Pero así sencillo con este caso sin variables ni nada tampoco obtengo el resultado que espero....

Perfil MP  
Objetivo: Re: Acerca De La Precisión En Decimales
En la version de gambas 2.23.1, lo ejecuta correctamente:
fracengambas2

Objetivo: Re: Acerca De La Precisión En Decimales
En la versión de gambas 2.99.1 que tengo me sale así el valor del frac, con respecto a tu problema santijav debes determinar el numero de decimales a utilizar como use el caso de round. Ahora puede haber otra opción que seria modificar la función frac para que tu determines el numero de decimales a mostrar.

ejerciciosk4cs

Tambien otra alternativa seria usar este extracto de código en el cual usa la función left para que tu determine los decimales a usar.

Print Left(CStr(ival_frac), 5)

Perfil MP  
Objetivo: Re: Acerca De La Precisión En Decimales
GRacias por las respuestas.

Efectivamente terminé usando round dentro de varios if anidados para determinar si necesitaba, uno, dos o tres decimales...

Según me dijeron en la lista de gambas está bien que muestre el número largo ya que es en realidad un número que no tiene representación binaria exacta y la computadora lo aproxima, algo como representar los irracionales o los periódicos.

Reconozco que se me pasó por alto lo de pasar a string y usar left Muy buena esa idea también!

Muchas gracias!

Saludos
Santiago.

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1481s (PHP: -35% SQL: 135%)
Consultas SQL: 25 - Debug off - GZIP Activado