Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Cómo Usar el FormatFloat(<formatstr>, <value>) (https://www.clubdelphi.com/foros/showthread.php?t=9293)

teletranx 20-04-2004 04:21:36

Cómo Usar el FormatFloat(<formatstr>, <value>)
 
Saludos a Todos,

Estoy utilizando Fast-Report, tengo que formatear números de como los siguientes
Entrada Salida Ideal
123456 123.456
-12345 (12.345)

Pero cuando utilizo números negativos que necesito que salgan entre ().

He leido la documentación de Fast-report al respecto, la cual hace referencia a que utiliza la misma estructura de Delphi. Busco la estructura (Format strings), la que necesito es '%m', el cual es para formatos de moneda. Cuando trato de comprobar el formato me sale un error.
Para ver estoy utilizando la siguiente en delphi
Formato : Variant;
Formato := Format('%8.0m',[-123456]);
y sale formato incompatible con el argumento.

Pregunta
Cual es el formato para que cuando entra un número negativo, salga entre () y positivo.

Gracias de antemano

Juan Carlos

jachguate 20-04-2004 04:25:19

supongo que para el formato %m espera un valor de coma flotante y le estas enviando un entero... probá con

Formato := Format('%8.0m',[-123456.0]);

Hasta luego.

;)

teletranx 20-04-2004 23:54:52

Gracias.

Lo probe en Delphi y salio todo bien, pero cuando lo probe en Fast-report, el resultado fue negativo.

La información de la función FormatFloat(<Fmt>, <Nro>),

Donde <Fmt> dice que tiene los mismos valores que en delphi, no es correcto.

Ahora mi pregunta es la siguiente, como puedo hacer (que no resulte costoso), para que los Números negativos salgan entre () en Fast-Report.

Por mi Parte estoy Utilizando lo siguiente

En la variable

[IF([TOTAL] > 0, [TOTAL] , [TOTAL] * (-1))]

En Antes de Imprimir
if [TOTAL] > 0 Then
Begin
Memo23.Visible := False;
Memo26.Visible := False;
End
Else
Begin
Memo23.Visible := True;
Memo26.Visible := True;
End;
En Donde
Memo23 := '(' y Memo26 := ')'

Resulta, pero cuando se tiene 5, o más variable, resulta costoso en tiempo.

Esperando sus respuestas Saluda Atte.

Juan Carlos:rolleyes:

teletranx 23-04-2004 00:11:47

Saludos, encontre la solución, que es modificando los fuentes de fast-report )f_Class.pas)
de la siguiente manera

DecimalSeparator := Chr(Format and $FF);
case f2 of
0: Result := FormatFloat('##0.' + Dup('#', (Format div $0100) and $FF), v);
1: Result := FloatToStrF(v, ffFixed, 15, (Format div $0100) and $FF);
2: Result := FormatFloat('#,##0.' + Dup('#', (Format div $0100) and $FF), v);
3: Result := FloatToStrF(v, ffNumber, 15, (Format div $0100) and $FF);
4: Result := FormatFloat(FormatStr, v); // Aqui
end;
se cambia por lo sigyuiente
Se define
Valor : Currency;
se cambia
4: if Copy(FormatStr,1,1) = '%' then
Begin { TODO : Cambio en el Formato de Presentacion, para Nro Negativos }
Valor := v;
Result := ' ' + SysUtils.Format(FormatStr, [Valor]);
End
Else
Result := FormatFloat(FormatStr, v);

En la planilla fast-report, en formato de variables (personalizada) se coloca por ejemplo %18.0m con esto toma el número y lo cambiente a () positivo (cuando es negativo). Con esto puede usarse todo los formatos % de Delphi.

Y por Ultimo en la aplicación principal en

procedure TfMenu.FormShow(Sender: TObject);
begin
CurrencyString := '';
NegCurrFormat := 0;

end;
Saluda

Juan Carlos:cool:


La franja horaria es GMT +2. Ahora son las 04:42:47.

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