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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2016
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Error al Multiplicar (Función de Redondeo)

Hola a todos, tengo la siguiente función para redondear:

Código Delphi [-]
Function Redondear (Numero : Double; PrecisionDec : byte) : double;
  function Potencia(Base : Double; Exponente : byte) : Double;
  begin
    Result := Exp(Exponente * ln(Base));
  end;
var Nro:Single;
iRound:Integer;
begin
  Nro := Numero * Potencia(10, PrecisionDec);

  if (Frac(Nro))>=0.5 then
    iRound := 1
  else
  if (Frac(Nro))<=-0.5 then
    iRound := -1
  else iRound := 0;

  Result := (Trunc(Nro)+iRound) / Potencia(10, PrecisionDec);
end;

Pero cuando redondeo este valor :247999.57 a 2 decimales el valor de la variable Nro es de 24799958, cuando debería ser 24799957...

O sea el error esta en esta linea:
Código Delphi [-]
  Nro := Numero * Potencia(10, PrecisionDec);

Alguien sabe porque se puede dar esto?

Saludos...
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
  #2  
Antiguo 12-04-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si quieres redondear, por ejemplo, a 2 decimales:
Código Delphi [-]
resultado := redondeo(importe,2);
Código Delphi [-]
uses Math;
...
...
function Redondeo (valor: Double; decimales: integer = 0): Double;
var
  factor: Double;
begin
  factor := IntPower(10,decimales);
  //
  if valor > 0 then
    Result := (trunc((valor*factor)+0.5)) / factor
  else
    Result := (trunc((valor*factor)-0.5)) / factor;
end;
Responder Con Cita
  #3  
Antiguo 12-04-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Neeruu Ver Mensaje
...
Pero cuando redondeo este valor :247999.57 a 2 decimales el valor de la variable Nro es de 24799958, cuando debería ser 24799957...
...
Alguien sabe porque se puede dar esto?
Hola.
Código Delphi [-]
...
var
  Nro: Double;
  ...
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 13-04-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Puedes hacer la misma prueba utilizando tipos Currency?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 14-04-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Clase número 1 en cualquier lenguaje: aprender los tipos de datos.

¿Desde cuando un Single tiene precisión para 8 decimales?
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error al multiplicar 2 memos rufo Varios 11 10-08-2012 23:18:42
Funcion de Redondeo ZiriusB OOP 6 16-12-2010 21:52:16
Error de redondeo xerkan Varios 2 03-11-2010 22:13:05
Problema de Redondeo de Decimales con una Función agustibaldo Varios 19 10-11-2008 13:13:03
funcion de redondeo de decimales Rabata Varios 2 29-09-2003 02:41:39


La franja horaria es GMT +2. Ahora son las 06:58:07.


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