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 28-04-2005
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Trabajar con decimales y formatos

Intento redondear decimales con "RoundTo" y no me funciona bien, porque redondea a partir del 6:
RoundTo(12.346,-2)=12.35. Correcto.
RoundTo(12.345,-2)=12.34 y debería ser 12.35.

Lo mismo me pasa con FloatToStrF(12.345,ffNumber,15,2)=12.34.

¿Podéis ayudarme?
Responder Con Cita
  #2  
Antiguo 28-04-2005
TheRafa TheRafa is offline
Miembro
 
Registrado: abr 2005
Posts: 24
Poder: 0
TheRafa Va por buen camino
Redondeo Matemático

Yo utilizo esta función ya que el redondeo del delphi funciona más o menos como tu dices, incluso un poco más raro ya que el cinco unas veces lo redondea hacia arriba y otras hacia abajo.


function Redondeo(Nro: Double; Dec: Integer): Double;
var
Cad, Cad1, Cad2: String;
Signo, Aux: Double;
begin
try
If Not CadenaVacia(FormatFloat('################.#########',Abs(Nro)))
Then
Begin
If abs(Nro) = Nro Then Signo := 1 Else Signo := (-1);
Aux := Abs(Nro*Power(10,Dec+1));
If scl(',',FloatToStr(Aux)) <> 0
Then Aux := StrToFloat(copy(FloatToStr(Aux),1,scl(',',FloatToStr(Aux))-1));
If Dch(FloatToStr(Aux),1) >= '5' Then Aux := Aux + 10;
Aux := StrToFloat(copy(FloatToStr(Aux),1, length(FloatToStr(Aux))-1));
Redondeo := (Aux/Power(10,Dec))*signo;
End
Else Redondeo := 0;
except
Redondeo := 0;
End;
End;
Responder Con Cita
  #3  
Antiguo 28-04-2005
Elfoscuro Elfoscuro is offline
Miembro
 
Registrado: mar 2005
Posts: 59
Poder: 20
Elfoscuro Va por buen camino
¿Y algo así no funcionaría?

Código Delphi [-]
entrada:=entrada*100
if entrada-int(entrada)>=0,5 then
    entrada:=int(entrada)+1
  else
    entrada:=int(entrada);
entrada:=entrada/100;

En entrada tenemos el número original y el 100 es para dos decimales, 1000 para 3, etc. Por otra parte... ¿existe la funciona int? ¿o es trunc? Vamos lo que quería con esa función era coger la parte entera, sin redondear, es decir int(1,1)=1 y int(1,7)=1.

Un saludo
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


La franja horaria es GMT +2. Ahora son las 17:42:11.


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