Fórum Converter valores como 10.80 para 10,80 #417397

24/05/2012

0

Galera eu tenho uma Query onde eu tenho um field do tipo String que me retorna o seguinte valor: 10.80, mas eu preciso transformar esse valor em Asfloat, ou seja, em 10,80.

Já tentei StrToFloat mas dar erro: is not a valid floating point value.

também tentei StrToFloatDef(QryTotais.FieldByName(total).AsString,0) mas ele retorna sempre 0(zero)

Alguem pode me ajudar
Sidney Abreu

Sidney Abreu

Responder

Posts

24/05/2012

Marco Salles

muitas formas , mas todas vão depender de fato da conscistencia dos seu dados

try
valor:=StrToFloat(StringReplace(SeuDataSet.FieldByName(SeuCampo).AsString,.,DecimalSeparator,[]));
Showmessage(floattostr(Valor));
except
//
end;
Responder

Gostei + 0

24/05/2012

Marco Salles

consistência ...
Responder

Gostei + 0

24/05/2012

Joel Rodrigues

Cara, dependendo do banco que você usa, talvez possa ser melhor já trazer o valor convertido do BD. Em SQL Server, por exemplo, você pode usar a função CAST. Assim, no Delphi, você usaria o campo como AsFloat.
Responder

Gostei + 0

24/05/2012

Marco Salles

Tem o Cast , mas se os dados ja estiverem em memoria não é necessário fazer nova requisição ao Banco
é so tratar os dados. Existe tb o evento OngetField
Responder

Gostei + 0

24/05/2012

Joel Rodrigues

Claro, é verdade, estando os dados em memória, o mais adequado é tratar via código no Delphi. Porém, se for possível já trazer os dados do banco convertidos, você transfere a responsabilidade do processamento da conversão para o banco, poupa algumas linhas de código e, consequentemente, memória da máquina que está executando sua aplicação.
Responder

Gostei + 0

25/05/2012

Sidney Abreu

Galera tentei usar o Cast mas ele não converte, o banco é o SQlite eu estou usando o Zeos no delphi. é uma aplicação que eu fiz para o android e o meu select é esse:


select distinct
produtos.Prod_Descricao,
itens.preco,
sum(itens.qtde) as Qtde,
itens.desconto,
itens.preco * cast(sum(itens.qtde) as float) as total
from
itens
inner join pedidos on (pedidos.numero = itens.numero)
inner join produtos on (produtos.Prod_id = itens.prod_id)
where
pedidos.data_cad = 23/05/2012
group by
produtos.Prod_Descricao
order by
produtos.Prod_Descricao
Responder

Gostei + 0

25/05/2012

Joel Rodrigues

E as conversões citadas pelo marco, já tentou?
Responder

Gostei + 0

25/05/2012

Marco Salles

E as conversões citadas pelo marco, já tentou?
.

Outra opção (não sei se o banco dele suporta ) é fazer um StringReplace no proprio Sql retornando
no lugar do Ponto o DecimalSeparator

Não manjo quase nada de Sql mas ja vi muitas coisas do genero
Responder

Gostei + 0

26/05/2012

Sidney Abreu

Só consegui resolver no braço mesmo, criei uma tabela com o nome Cast com os campos nos tipo de dados que eu precisava e fiz um select. fica ai a dica pra quem for usar o Sqlite integrado ao delphi.

select
    Prod_Descricao ,
    preco    ,    
    Qtde      ,
    desconto ,
    total        
from tabela_cast 
union 

select distinct
    produtos.Prod_Descricao as Prod_Descricao,
    itens.preco,
    sum(itens.qtde) as Qtde,
    itens.desconto,
    itens.preco * sum(itens.qtde) as total
from
    itens
inner join pedidos on (pedidos.numero = itens.numero)
inner join produtos on (produtos.Prod_id = itens.prod_id)
where
     pedidos.data_cad = 23/05/2012
group by
    produtos.Prod_Descricao
order by 
    produtos.Prod_Descricao

Responder

Gostei + 0

26/05/2012

Joel Rodrigues

Que bom que você conseguiu resolver. Obrigado por compartilhar a solução.
Responder

Gostei + 0

26/05/2012

Marco Salles

muitas formas , mas todas vão depender de fato da conscistencia dos seu dados

try
valor:=StrToFloat(StringReplace(SeuDataSet.FieldByName(SeuCampo).AsString,.,DecimalSeparator,[]));
Showmessage(floattostr(Valor));
except
//
end;


Joel esta conversão da certo tb , o unico problema é o Forum que come as aspas simpes e a formatação de nossas
respostas ... A Questão é se quer converter 10.80 para float tem que transformar o ponto para o decimal separator
padrão que é o ponto e virgula . Ou tb transformar o contrário , isto é o Decimal separator para o Ponto

descimalseparator:=. ;

Responder

Gostei + 0

26/05/2012

Marco Salles

muitas formas , mas todas vão depender de fato da consistencia dos seu dados

try
valor:=StrToFloat(StringReplace(SeuDataSet.FieldByName(SeuCampo).AsString,.,DecimalSeparator,[]));
Showmessage(floattostr(Valor));
except
//
end;


Joel esta conversão da certo tb , o unico problema é o Forum come as aspas simples e a formatação de nossas
respostas ... A Questão é : se quer converter 10.80 para float tem que transformar o ponto para o decimal separator
que por padrão é a virgula . Ou pode-se tb transformar o contrário , isto é o Decimal separator para o Ponto

descimalseparator:=. ;

Assim o delphi passa a aceitar 10.80 como numero
Responder

Gostei + 0

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

Aceitar