PDA

Ver la Versión Completa : simbolo moneda en formatfloat


Rofocale
23-10-2010, 02:51:08
Buenas otra ves preguntando alguna que otra cosa.. :D
Esta vez quería preguntar como puedo hacer para que aparezca el símbolo $ ó S/. hago un edit1.text := FormatFloat('#,##0.00', valor); me formatea el valor que deseo, por ejemplo 5.50 pero quiero hacer que este tenga el valor mas el símbolo S/. 5.50 una ves cuando lo hice en el campo display format le puse esto s/'.' #,##0.00 y todos los campos tenían el símbolo pero esta vez no es en la base de datos solo superficialmente en los edits normales como lo haria asi ?
FormatFloat('s/'.' #,##0.00', valor)

gracias

ecfisa
23-10-2010, 03:16:54
Hola.

¿ Y no te sirve un TMaskEdit, iniciándolo así ?


MaskEdit1.EditMask:= 's/.#,##0.00;1; ';


Saludos. :)

Young
23-10-2010, 03:55:32
Simplemente FormatFloat( '$ ,0.00', 12345.67 ).

Saludos.

Rofocale
23-10-2010, 08:43:38
no funciona por el punto del simbolo s/. da error
otra idea ?
gracias

LoPiTaL
23-10-2010, 11:45:50
Tal vez es una tontería lo que voy a decir... pero, ¿por qué no haces esto?

edit1.text := FormatFloat('#,##0.00', valor)+'$';

ó

edit1.text := '$'+FormatFloat('#,##0.00', valor);

Un saludo,
LoPiTaL

Rofocale
23-10-2010, 16:10:32
eso ya lo habia intentado hacer, pero luego cuando intento calcular ese edit mas otro edit me dice que no es un floating point value... porque esta el simbolo

alguna otra idea mas ? thanks

Rofocale
24-10-2010, 02:43:47
amigos ayudenme es urgente poner este simbolo y no me sale :( si lo concateno con + al calcula os dos edits me dicen que no es un float

Rofocale
24-10-2010, 20:00:54
nadie ? - me ayudan ?

ecfisa
24-10-2010, 20:01:31
Hola.

Probá si te sirve este código:

type
TForm1 = class(TForm)
Button1: TButton;
MaskEdit1: TMaskEdit;
MaskEdit2: TMaskEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure MaskEdit1Exit(Sender: TObject);
procedure MaskEdit2Exit(Sender: TObject);
private
FNum1,FNum2: Double;
public
end;

var
Form1: TForm1;

implementation{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
// dado el formato que imponés en la máscara, esta línea es
// necesaria si tenés ',' como separador decimal
DecimalSeparator:= '.';
end;

procedure TForm1.MaskEdit1Exit(Sender: TObject);
var
Cad: string;
begin
with Sender as TMaskEdit do
Cad:= Text;
Delete(Cad,Pos('$',Cad),1);
Delete(Cad,Pos(',',Cad),1);
FNum1:= StrToFloat(Cad);
end;

procedure TForm1.MaskEdit2Exit(Sender: TObject);
var
Cad: string;
begin
with Sender as TMaskEdit do
Cad:= Text;
Delete(Cad,Pos('$',Cad),1);
Delete(Cad,Pos(',',Cad),1);
FNum2:= StrToFloat(Cad);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Format('%f %f %f',[FNum1, FNum2, FNum1 + FNum2]));
end;
...


Saludos. :)

Rofocale
25-10-2010, 20:41:56
gracias :)

elarys
25-10-2010, 22:32:05
no recuerdo bien, tengo ese codigo en casa,
estoy en el trabajo, pero yo algo parecido a esto.


edit1.text := FormatString('m', valor);


asi te muestra directamente decimales y el simbolo monetario,
que tengas por defecto configurado en tu windows

no recuerdo si era m o n...
cuando llegue a casa y verifique el codigo,
te confirmo porque estoy suponiendo

elarys
26-10-2010, 14:03:16
no estaba tan equivocado, mira esta pagina (http://www.delphibasics.co.uk/RTL.asp?Name=Format)

ecfisa
26-10-2010, 15:16:01
no estaba tan equivocado, mira esta pagina (http://www.delphibasics.co.uk/RTL.asp?Name=Format)
Hola elarys.

Tu propuesta para mostrar el formato es correctísima al igual que la de LoPiTaL.

Pero el problema que expone Rofocale es:

eso ya lo habia intentado hacer, pero luego cuando intento calcular ese edit mas otro edit me dice que no es un floating point value... porque esta el simbolo


Cualquier formato no numérico que agregues en la propiedad Text del TEdit, la tenés que quitar al intentar convertir a número.
Esto implica que tenés que trabajar el Text del Edit aparejado con una variable numérica si no queres perder el formato.

Sugerí el MaskEdit por que reduce las comprobaciónes de ingreso al ajustarse este a una máscara. Pero puede hacerce con un Edit.

Ejemplo:

...
procedure TForm1.EditExit(Sender: TObject);
begin
with (Sender as TEdit) do
begin
if Name = 'Edit1' then
FNumEd1:= StrToFloat(Text)
else
FNumEd2:= StrToFloat(Text);
Text:= Format('%m',[StrToFloat(Text)]);
end;
end;

procedure TForm1.btSumarClick(Sender: TObject);
begin
ShowMessage(FloatToStr(FNumEd1+FNumEd2));
end;
...


Ahora bién este código, aparentemente sencillo usando un TEdit, se complicaría bastante con las comprobaciones adicionales
que impone el formato solicitado por Rofocale: '$' delante, signo (-), digitos(0..9), ',' como separador de miles, y '.' de decimales.



Saludos.:)

Rofocale
26-10-2010, 17:19:07
gracias me sirvio mucho sus respuestas

LoPiTaL
26-10-2010, 20:56:00
Hola de nuevo. Yo soy relativamente nuevo en las APIs de Delphi, por eso componentes del estilo de MaskEdit no suelo usarlos (sencillamente porque desconozco su existencia, o porque cuando se me plantea un problema no pienso en ellos y decido implementarlo yo digamos que "a pelo").
En este caso me parece bastante sencillo, por ejemplo, la solución que comentas tú, de mantener dos variables numéricas y mostrar dos cadenas diferentes de texto.
Para sumar, evidentemente sumas las variables numéricas pero muestras el texto que quieras, con el $,%, €, etc...
Si en algún momento deseases cosas más avanzadas, p. ej. al entrar en el TEdit quitar el texto sobrante para poder escribir sólo el número y al salir reescribirlo todo, te es bastante sencillo hacerlo con las 4 variables anteriores y los eventos que el componente te proporciona. Incluso podrías pensar en derivar del TEdit e implementar éstas en la nueva clase.

Ahora bién este código, aparentemente sencillo usando un TEdit, se complicaría bastante con las comprobaciones adicionales
que impone el formato solicitado por Rofocale: '$' delante, signo (-), digitos(0..9), ',' como separador de miles, y '.' de decimales.

No entiendo qué quieres decir con esto... Tienes las variables separadas, puedes darle el formato que quieras:
showmessage('Mi variable que creo que es un dólar $'+inttostr(FVar1+FVar2)+' o podrían ser € no lo sé.....'); :)

Un saludo,
LoPiTaL

ecfisa
26-10-2010, 21:10:47
No entiendo qué quieres decir con esto... Tienes las variables separadas, puedes darle el formato que quieras:
showmessage('Mi variable que creo que es un dólar $'+inttostr(FVar1+FVar2)+' o podrían ser € no lo sé.....'); :)

Un saludo,
LoPiTaL

Las validaciones de lo que se ingresa en el TEdit. Echo que lamentablemente sucede antes de que puedas hacer:

FloatToStr(FVar1 + FVar2);



Saludos. :)