Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2003
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Problemas matemáticos simples.

Muy buenas, necesito ayuda para solucionar un pequeño problema matemático.

Debo pasar unos números con decimales a una cadena, alineado a la derecha, sin coma ni punto decimal y cambiado los espacios por ceros.

La rutina es algo así:

var i : integer;
cadena : string[10];

...

Str(Trunc(QueryCampo.AsFloat * 100):10, cadena);
for i:=1 to 10 do
if cadena[i]=' ' then cadena[i]='0';

Si en lugar de un campo de una consulta (por cierto definido en Interbase como Numeric (10,2) ) utilizo una variable de tipo Double funciona correctamente, pero con el campo de la consulta me hace cosas raras como convertir el número 54.90 en 0000005489 (la función Trunc le hace un redondeo).

¿Cómo puedo solucionar esto?

He probado a cargar el campo de la consulta en una variable de tipo Double, pero en ese caso tampoco me funciona, lo cual me hace suponer que el problema lo tengo al referirme al campo como AsFloat, pero en otros formularios eso me funciona perfectamente.

Haciendo pruebas para solucionar lo anterior, me he encontrado con lo siguiente:


var i, j : integer;
cadena : string[10];
ndecimal : Double;
...

ndecimal:=123.00;
for j:=1 to 99 do
begin
Str(Trunc(ndecimal * 100):10, cadena);
for i:=1 to 10 do
if cadena[i]=' ' then cadena[i]='0';
Memo1.Lines.Add(cadena);
ndecimal:=ndecimal + 0.01;
end;

funcionaba correctamente hasta generar el número 123.55, pero después generaba los siguientes 123.5599, 123.5699, etc.

Hice varias modificaciones y pruebas sin conseguir solucionarlo, pero al día siguiente funcionó correctamente.

¿Qué estaba pasando?
¿Hay alguna directiva del compilador que deba utilizar?
¿Qué garantía tengo de que esto no me ocurrirá en una aplicación buena con datos y cálculos reales?
__________________
Rafita.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:03:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi