Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-05-2019
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 75
Poder: 11
Oscar Guzmán Va por buen camino
Exclamation Ayuda con redondeo

Saludos a todos en el foro


Quisiera saber si alguien me puede ayudar con lo siguiente:


Tengo que redondear los productos de una tabla, respecto a sus precios y costos siendo lo partícular de este asunto que no se tiene que redondear los decimales sino de la siguiente forma.


Producto 1 : 25.430,25 debe quedar en 25.990,00
Producto 2 : 36.751,00 debe quedar en 36.990,00
Producto 3 : 18.950,45 debe quedar en 18.990,00
Producto 4 : 18.992,00 debe quedar en 19.990,00
Y así sucesivamente con todos los productos que han sido llamados para actualizar su precio, es decir, todos deben ser llevados a la cifra 990 más cercana en incremento.



La función de round de delphi no me ayuda en este sentido y quisiera saber si alguien haya tenido un caso parecido y me oriente con esto


Gracias.
__________________
Oskar
Responder Con Cita
  #2  
Antiguo 06-05-2019
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 1.883
Poder: 14
oscarac Va por buen camino
puedes idearte una rutina

los importes que tienes llevarlas hasta el millar mas proximo y restarle 10, salvo en el ultimo ejemplo que cuando se pasa de 990, le sumas 1000 y redondeas hasta 990
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 06-05-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 147
Poder: 6
bucanero Va camino a la fama
hola a todos

prueba este código

Código Delphi [-]
function EspecialRound(const value: Currency): Currency;
begin
  Result := value / 1000;
  Result := TRUNC(TRUNC(Result) + Frac(Result) / 0.99) + 1;
  Result := 1000 * Result - 10;
end;

procedure TForm2.test;
const
  values: array[1..4] of Currency = (25430.25, 36751, 18950.45, 18992);
var
  i: LongInt;
begin
  for i := 1 to 4 do
    Memo1.Lines.Add(format('%m: %m', [values[i], EspecialRound(values[i])]));
end;

Un saludo
Responder Con Cita
  #4  
Antiguo 06-05-2019
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 75
Poder: 11
Oscar Guzmán Va por buen camino
Cita:
Empezado por oscarac Ver Mensaje
puedes idearte una rutina

los importes que tienes llevarlas hasta el millar mas proximo y restarle 10, salvo en el ultimo ejemplo que cuando se pasa de 990, le sumas 1000 y redondeas hasta 990

Hola Oscarac y gracias por responder


Si, en eso ando, sólo que quería saber si había alguna función en Delphi que permitiera hacer esa clase de redondeos, gracias.
__________________
Oskar
Responder Con Cita
  #5  
Antiguo 06-05-2019
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 75
Poder: 11
Oscar Guzmán Va por buen camino
Thumbs up

Cita:
Empezado por bucanero Ver Mensaje
hola a todos

prueba este código

Código Delphi [-]function EspecialRound(const value: Currency): Currency; begin Result := value / 1000; Result := TRUNC(TRUNC(Result) + Frac(Result) / 0.99) + 1; Result := 1000 * Result - 10; end; procedure TForm2.test; const values: array[1..4] of Currency = (25430.25, 36751, 18950.45, 18992); var i: LongInt; begin for i := 1 to 4 do Memo1.Lines.Add(format('%m: %m', [values[i], EspecialRound(values[i])])); end;


Un saludo

Hola Bucanero, gracias.


Voy a probar tu código y confirmo por aquí si me funcionó o si tuve que modificarle algo, gracias por la información
__________________
Oskar
Responder Con Cita
  #6  
Antiguo 07-05-2019
Oscar Guzmán Oscar Guzmán is offline
Miembro
 
Registrado: oct 2008
Ubicación: Caracas-Venezuela
Posts: 75
Poder: 11
Oscar Guzmán Va por buen camino
Thumbs up

Hola Bucanero,


Haciendo solo algunas modificaciones a mi código pude resolver el problema, en realidad fue facil partiendo del uso múltiple de trunc.


Muchas gracias por tu ayuda y por tu tiempo.



Coloco el código para que otros puedan aprovecharlo

Código Delphi [-]
  function EspecialRound(const value, FactorAprox : Currency) : Currency;
  var
    FactorAprox1 : real;
    begin
      FactorAprox1 := FactorAprox / 1000;
      Result := value / 1000;
      Result := Trunc(trunc(Result) + Frac(Result) / FactorAprox1) + 1;
      Result := 1000 * Result - (1000 - FactorAprox);
    end;
__________________
Oskar
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Redondeo cesar vidal Varios 30 22-04-2014 22:01:29
Redondeo DavidSG4 Conexión con bases de datos 12 13-10-2011 15:51:55
Funcion de Redondeo ZiriusB OOP 6 16-12-2010 21:52:16
redondeo pedrito1111 Varios 1 13-11-2009 01:40:23
Redondeo de Float Nomad Varios 8 11-09-2008 19:20:05


La franja horaria es GMT +2. Ahora son las 05:57:37.


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