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
  #21  
Antiguo 14-09-2010
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
Cita:
Empezado por Casimiro Notevi Ver Mensaje
hasta el nombre de las variables se parecen, esa función la hicimos entre mi compañero y yo, un día en la que estábamos desesperados con los redondeos y dijimos "de hoy no pasa, hacemos una función que redondee de verdad". Y nos salió esa que he puesto.
Seguramente los de delphi se copiaron de nosotros
Pues ya ves, como son las cosas... ¡Que te paguen los derechos de autor!

Choca los 5 amigo, yo empecé a meterme más en esto de los números, el redondeo, cálculo y demás hace unos meses tras recibir unos Horrores de números

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #22  
Antiguo 06-08-2012
Avatar de TheJHorse
TheJHorse TheJHorse is offline
Miembro
 
Registrado: dic 2005
Posts: 13
Poder: 0
TheJHorse Va por buen camino
Se que el tema esta ya tocado, pero quisiera reincidir en el ejemplo del amigo rrf, pero a solo 2 digitos, aca todos empiezan a nombrar y decir que no se aplica a la realidad, pero quisiera poner el siguiente ejemplo:

Un supermercado que gira facturas al dia en un promedio de 15000 facturas tan solo en uno de sus locales, donde calculos de total: 1.33333333 segun ustedes deberia ser redondeado a 1.33 donde claramente hay una perdida de 0.00333333 centavos para la empresa diario de 50 centavos, 1500 mensual, 18000 anual, tan solo de una sede; lleven el caso para un banco donde las transacciones son aun mayores.

No creo que se deba decir tan alegremente y confiadamente que algo no se aplica a la realidad, por que la realidad mis queridos amigos es absurdamente coherente.
__________________
PhC Rulez
Responder Con Cita
  #23  
Antiguo 06-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, no es así, además de que ninguna empresa, y la de tu ejemplo menos, no pierden dinero, al contrario, ganarán más

Primero, todo depende de la necesidad, una empresa puede querer/necesitar redondear a 2 decimales y tiene que hacerlo de esa forma. Entonces no queda más remedio que redondear.
Segundo, no puedes pedirle a un cliente, en tu caso de ejemplo, que pague 0,00333333 porque no se puede, prueba a pagar tú mismo esa cantidad, lo mínimo que puedes pagar en cualquier sitio, negocio, tienda, banco, etc. es un céntimo: 0,01
Tercero, entonces en tu caso, ¿cuánto le cobras al cliente?, pues eso, 1 céntimo, y ¿qué ocurre?, pues ahora resulta que la empresa no ha perdido 0.00333333 sino que ha ganado: 0,00666666 que multiplicado por tus 15000 facturas, son 99,9999 que al año sería 1199,9988 (1200 céntimos), o sea, en 180000 facturas (15000x12) habrá ganado 12 euros/dólares/loquesea al año.
Y cuarto, como dije al principio, todo depende de las necesidades que se tengan, no es lo mismo el redondeo de una factura (que va a 2 decimales), que los cálculos científicos de algún proyecto ultra preciso que se mide en micrómetros, por decir algo.
Y en este caso, el usuario necesitaba redondear a 2 decimales.
Aunque con la función que hemos presentado se puede redondear a los decimales que se necesite, que es de lo que se trata.




Cita:
Empezado por TheJHorse Ver Mensaje
Se que el tema esta ya tocado, pero quisiera reincidir en el ejemplo del amigo rrf, pero a solo 2 digitos, aca todos empiezan a nombrar y decir que no se aplica a la realidad, pero quisiera poner el siguiente ejemplo:

Un supermercado que gira facturas al dia en un promedio de 15000 facturas tan solo en uno de sus locales, donde calculos de total: 1.33333333 segun ustedes deberia ser redondeado a 1.33 donde claramente hay una perdida de 0.00333333 centavos para la empresa diario de 50 centavos, 1500 mensual, 18000 anual, tan solo de una sede; lleven el caso para un banco donde las transacciones son aun mayores.

No creo que se deba decir tan alegremente y confiadamente que algo no se aplica a la realidad, por que la realidad mis queridos amigos es absurdamente coherente.
Responder Con Cita
  #24  
Antiguo 06-08-2012
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
Y para sumar a las palabras de Casimiro el valor mínimo de una moneda y la aplicación de redondeos está fijada por ley en cada país. En el caso de Argentina por ejemplo lo mínimo es el centavo, o dicho de otra manera la céntima parte del peso: 1/100 = 0,01. ¡Aunque hace años que no veo una monedita de 1 centavo!
Por tanto es imposible de cobrar diferencias menores. Y no es legal hablar de una precisión mejor que esa... ¿O es que realmente necesitas irte a las milésimas?
Respecto a los casos de redondeo, en este pedacito de tierra gobernado por una reinita bastante disparatada, existe una ley de redondeo a favor del cliente (ley 26179) que indica que toda diferencia menor a los 5 centavos y que no sea posible efectuar el vuelto la diferencia (el redondeo) sea a favor del cliente. Gracias a esa ley es que los números cuadran mucho mejor ya que se resumen a montos decimales en múltiplos de cinco (la mayoría de los casos ) Al menos hasta que ya ni se encuentren las monedas de 5 centavos (que no falta mucho... si practicamente no hay monedas... ¿O acaso hay algo que se pueda comprar con 25 ctvs? )

Saludos fraccionados diría Al
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #25  
Antiguo 30-05-2015
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Hola...

Tratando desde hace tiempo encontrar solucion para este problema, veo que no fue solo a mi que se rompio la cebeza de como solucionarlo. Yo uso RoundTo(), pero a veces me falla. En definitiva cual es la rutina mas acertada para usar, despues de tantas explicaciones de Delphius, que quisiera que fuese mi socio por lo que sabe, y por que esta mas cerca de donde vivo, sin desmerecer a los demas. ejemplo tengo una cifra que es 45,555 y si la redondo a dos me queda 45,55.
Gracias a todos por existir....

Luis Roldan
Mar del Plata
Argentina
Responder Con Cita
  #26  
Antiguo 30-05-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Chaja,

Cita:
Empezado por Chaja
...uso RoundTo...pero a veces me falla...cual es la rutina mas acertada para usar...ejemplo tengo una cifra que es 45,555 y si la redondo a dos me queda 45,55...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function RoundTo(F: single; D: integer): double;
var
   P : double;
begin
   P := Power(10, D);
   Result := Trunc(F * P + 0.5) / P;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   N1, N2 : Double;
   MsgUsr : String;

begin

   N1 := 45.555;
   N2 := RoundTo(N1,2);

   MsgUsr := 'N1 (Valor Original) = %g ' + #13#10 + #13#10 + 'N2 (Valor redondeado a 2 decimales) = %g';

   MessageDlg(Format(MsgUsr,[N1,N2]),mtInformation,[mbOK],0);

   N1 := 3.1415927;
   N2 := RoundTo(N1,3);

   MsgUsr := 'N1 (Valor Original) = %g ' + #13#10 + #13#10 + 'N2 (Valor redondeado a 3 decimales) = %g';

   MessageDlg(Format(MsgUsr,[N1,N2]),mtInformation,[mbOK],0);


end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Permite realizar redondeos por exceso, como se muestra en la siguiente imagen:



Nota : La función de redondeo del ejemplo fue tomada de : Como redondear a partir del numero 5 .

Espero sea útil

Nelson.
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
Como redondear un numero en un procedimiento en Firebird Gaby123 SQL 0 26-02-2007 18:25:26
Cómo Redondear a 4 decimales un campo de tipo Numérico vick Conexión con bases de datos 1 11-10-2005 01:04:23
Funcio para obtener las decimas de segundo enzo Varios 2 13-05-2005 01:06:11
Mostrar un Float como un hh:mm:ss rjsitruiz Impresión 2 04-07-2004 14:25:29


La franja horaria es GMT +2. Ahora son las 13:40:25.


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