FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Bug o es normal? - Trunc function
Me he encontrado q la funcion Trunc no hace bien su proposito, o eso me parece (vamos, yo diria q no es normal ). Uso Delphi 2k6.
Ahi va el ejemplo q creo q demuestra q no funciona (o eso creo yo):
He probado cambiando el 100 por 101 o 100.01 (entre otros), y si funciona, pero no veo logico lo q hace con 100 exactos:
Quizas sea ya un "bug" conocido, pero... si no es un bug, ¿puede alguien explicarmelo el pq hace esto?, hehe Gracias. |
#2
|
|||
|
|||
yo creo que el problema puede estar en la operacion con numeros reales, no tanto en el trunc, porque no intentas usar el tipo currency en lugar del real?
|
#3
|
||||
|
||||
Y pregunto yo, ¿todo esto es para obtener la parte decimal de un número? Porque si es así acabas antes usando la función Frac()
|
#4
|
||||
|
||||
Con la poca precisión del real, lo mas seguro es que valor1 no sea nueve, sino en realidad 8.999999999996 o algo así. Evidentemente, el trunc de eso es 8 y no 9. Pero este no es un problema de delphi, es un problema de las computadoras y los formatos para almacenar números.
Como ya te dijeron, podes obtener la parte fraccionaria directamente, o usar números con mas precisión, como los Double. Aún con estos, el problema persistirá, solo que ocurrirá menos veces (aquellas para las que la precisión del número resulte insuficiente para la operación que realizas y el resultado que queres ver). Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#5
|
||||
|
||||
No, no lo hago para obtener la parte decimal, eso es un pequeño ejemplo q he puesto, lo q yo queria es pasar de un "real" a un "entero" (Real -> Integer/Word), y me di cuenta q en el codigo original no me devolvia el valor "correcto" e hice este pequeño (e inutil) ejemplo para comprobarlo.
Pero probare con double u otros. Saludos. Última edición por xEsk fecha: 14-09-2006 a las 00:08:13. |
#6
|
||||
|
||||
Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#7
|
||||
|
||||
jachguate lo de pasar de una variable con un valor "Real" a un "Integer" era pq necesitaba acceder a una posicion de un "Array", y la posicion se obtenia apartir de una formulita (xorra) q requeria de numeros reales, pero el resultado era un numero "natural". Tu solucion es buena tambien, pero con cambiar de "Real" a "Extended" ya funciono bien (y asi me libro de incluir Math al uses xDDD)
Saludos. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Return value of function might be undefined | momo | OOP | 5 | 27-06-2006 23:20:44 |
Tablas en Function | rolando_s | Conexión con bases de datos | 2 | 23-12-2004 21:26:59 |
Create Function | rickymarti | Firebird e Interbase | 1 | 02-12-2004 10:37:00 |
Function | vtdeleon | OOP | 1 | 25-11-2004 07:22:48 |
SQL Server - Función TRUNC | Viet | SQL | 7 | 21-11-2003 21:24:52 |
|