Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Acerca De La Precisión En Decimales (SOLUCIONADO)
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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 
santijav - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
gara_pm - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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...
 



 
santijav - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
gara_pm - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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....
 



 
santijav - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Acerca De La Precisión En Decimales 
 
En la version de gambas 2.23.1, lo ejecuta correctamente:
fracengambas2
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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)
 

 



 
gara_pm - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
santijav - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Acerca De Ubuntu 10.04 (SOLUCIONADO) ahtonio General 4 Lunes, 10 May 2010, 15:35 Ver último mensaje
ahtonio
No hay nuevos mensajes Acerca De SHELL -- Me Tira Todo A La Salid... santijav General 1 Jueves, 28 Julio 2011, 21:32 Ver último mensaje
santijav
No hay nuevos mensajes Recuperar Numeros Con Decimales De ColumVi... marcopc Aplicaciones/Fragmentos de Código 3 Lunes, 17 Octobre 2011, 17:58 Ver último mensaje
marcopc
No hay nuevos mensajes Precisión De Los Decimales Shell General 1 Domingo, 13 Julio 2014, 20:32 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron