[b]Formatar Float - Para DragonWar[/b]

28/02/2003

2

Vamos lá:

O formato Float (Americano) não possui separador de milhar, somente ponto decimal,nesse formato: ´12346.78´ o nosso padrão usado é esse ´12.345,60´ note que o ponto de milhar é o ponto decimal americano.

Para converter esses tipos você tem que entender bem o formato deles, em tabelas o formato de gravação é sempre o americano, porém ao exibir (em DBEdit, DBGrid) sempre será exibido o padrão definido em configurações regionais do Windows, ai pode estar a confusão.

Para resolver isso, use o DecimalSeparator sugerido por alguns usuários e remova os ´.´ ou ´,´ indesejáveis:

O uso das configurações de ponto decimal e milhar afetam na conversão de string para float e máscaras componentes (MaskEdit). Aconselho deixar sempre no padrão brasileiro.

[color=red:599fa17767](Force a situação, pois em alguns micros o usuário pode ter alterado no painel de controle).[/color:599fa17767]


ThousandSeparator:= ´.´;
DecimalSeparator:= ´,´;
CurrencyDecimals:= 2;

Você tem que saber como será informado o float para remover ou substituir os pontos. Com essa configuração, StrToFloat sempre solicitará o formato ´1000,00´ (sem ponto de milhar)


[b:599fa17767]Exemplo 1 - Formatar String [/b:599fa17767]
CAMPO_STRING := ´1.000,00´;
While pos(´.´,CAMPO_STRING) > 0 do [color=blue:599fa17767]//REMOVE TODOS OS ´.´[/color:599fa17767]
Delete(CAMPO_STRING, pos(´.´,CAMPO_STRING), 1);

[color=blue:599fa17767]//CAMPO_STRING está com conteúdo 1000,00//[/color:599fa17767]

While pos(´,´,CAMPO_STRING) > 0 do [color=blue:599fa17767]//SUBSTITUI A ´,´ POR ´.´[/color:599fa17767]
CAMPO_STRING[pos(´.´,CAMPO_STRING)] := ´.´;

[color=blue:599fa17767]//CAMPO_STRING está com conteúdo 1000.00//[/color:599fa17767]


[b:599fa17767]
Para gravar em DB há um outro problema: [/b:599fa17767]

Se for gravar em Table o valor tem que ser um Float válido de acordo com o Windows:
Table1.FieldByName(´Campo_Float´).Value := StrToFloat(´1000,00´);

Se for gravar via Query o valor tem que ser o padrão americano:
Query1.SQL.Text := ´Insert into Tabela (campo_float) values (1000.00);

[color=red:599fa17767]Em hipótese alguma utilize ponto de milhar para converter de String para Float.[/color:599fa17767]

Para exibir em edit, label, memo etc.. formate o float válido como quizer.

Showmessage( FormatFloat([b:599fa17767]´#,0.00´[/b:599fa17767], StrtoFloat( ´1000,00´ )));

Lembre-se formato do Float é sempre ´,´ e ´.´ será exibido o formato conforme o configuração, mas a conversão tem que ser essa.


Okama

Okama

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar