![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Problema de Redondeo de Decimales con una Función
Estimados amigos de Club Delphi, en esta oportunidad les escribo porque tengo un problema bastante raro con una función que intenta obtener solo dos decimales de un valor.
Concretamente tengo lo siguiente: Código:
function TFormPrincipal.TruncarDecimales (parametro: Double):Double; begin Result := (Int(parametro * 100)) / 100; end; Código:
IMPORTE_TOTAL := TruncarDecimales(IMPORTE); El problema se presenta cuando graba el resultado. Supongamos que, al momento de llamar a la función, IMPORTE = 190.950; cuando graba en IMPORTE_TOTAL el resultado es 190.94.- Realmente no se que puede estar pasando. He probado declarar tanto la function como las variables como tipo Extended pero sigue persistiendo el problema. ![]() Desde ya muchas gracias por su tiempo. Saludos a todos. |
#2
|
||||
|
||||
![]() hola agustibaldo, yo lo veo raro lo que estas haciendo en tu funcion TruncateDecimales;sinceramente no hace nada esa funcion por que primero lo multiplicas * 100 y luego lo divides por el mismo 100
![]() ![]() Saludos.........
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 Última edición por rgstuamigo fecha: 07-11-2008 a las 21:31:05. |
#3
|
||||
|
||||
Es broma ¿no?
multiplicas por 100 y luego divides por 100.... ![]() ![]() ![]() además, ¿que tiene de malo la función "int"? ¿para que crear otra?
__________________
Última edición por ContraVeneno fecha: 07-11-2008 a las 22:54:29. |
#4
|
||||
|
||||
Que sí, que la función está bien.
multiplica por 100 coge la parte entera !! divide entre 100 (la primera vez que ví la función, también me pasé por alto el "int" y los paréntesis ![]() El segundo paso se os coló ![]() Yo declaraba todas las variables como Currency y así evitaba esa función y el fallo inherente a los Floats/Extended que nunca guardarán el valor que representa, siempre guardará una aproximación. Si usas Bases de datos, cambia el tipo también a Currency o NUMERIC(10,2) (en interbase y firebird con dialecto 3). Si eso, pregunta ![]() Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
||||
|
||||
cierto, cierto, mea culpa
En SQL Server, el tipo de dato para el campo es "money" o "decimal(10,2)" ¿"FormatFloat" hubiera servido?
__________________
|
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
problemas con redondeo (decimales) | Milperrimo | Varios | 4 | 26-01-2008 05:33:03 |
Redondeo de decimales | Cheswar | Varios | 3 | 07-10-2007 21:31:10 |
redondeo a 2 decimales | torito | Varios | 4 | 22-12-2004 18:36:34 |
funcion de redondeo de decimales | Rabata | Varios | 2 | 29-09-2003 02:41:39 |
Problema de redondeo | cmgenny | Varios | 3 | 08-08-2003 20:16:38 |
![]() |
|