[b]Formatar Float - Para DragonWar[/b]
28/02/2003
0
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.
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)