PDA

Ver la Versión Completa : Cómo Usar el FormatFloat(<formatstr>, <value>)


teletranx
20-04-2004, 04:21:36
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: