Silva_henry Postado Setembro 25, 2008 Denunciar Share Postado Setembro 25, 2008 Olá pessoal,estou com um pequeno problema.modulo.cds_descmotormonoAMP_SCARGA_MAX.valueEste campo no meu banco de dados ( Firebird ) é FloatEle me retorna um valor assim : 3,59999999....Eu precisava arredondar este valor para 3,6...Como proceder ? Não posso transformar em String porque eu vou comparar este valor depois...e assim por diante...se eu tiver um valor 3,7888 arredonda para 3,8...Não posso mudar a estrutuda do banco,pois faço calculos que usam 2 ou 3 casas decimais,apenas neste caso tenho que usar 1 casa decimal.ObrigadoAté mais Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 25, 2008 Denunciar Share Postado Setembro 25, 2008 Este campo no meu banco de dados ( Firebird ) é FloatEle me retorna um valor assim : 3,59999999....Eu precisava arredondar este valor para 3,6...Como proceder ? Não posso transformar em String porque eu vou comparar este valor depois...Um exemplo:procedure TForm1.Button1Click(Sender: TObject); var val : real; begin val := 5.7555555; label1.caption := floattostr(round(val * 100)/100); // resposta 5,76 end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Silva_henry Postado Setembro 25, 2008 Autor Denunciar Share Postado Setembro 25, 2008 OláSalve salve grande Jhonas,rsrs.Deu certo sua função,usei numa variáve: aux := floattostr(round(modulo.cds_descmotortriAMP_SCARGA_MAX.value * 100)/100);Só uma perguntinha,qual o segredo do round ? o que ele faz ?Obrigadão mesmo,salvou minha vida aquiAbraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Silva_henry Postado Setembro 25, 2008 Autor Denunciar Share Postado Setembro 25, 2008 Opa,felicidade de pobre dura pouco,rsrsOutro problema.Como eu vou fazer uma comparação,eu preciso que este valor seja em Float.Quando eu tento converter ele para Float,minha variavel fica zerada,tem algum por que ?por exemplo: //Aqui faz o arredamento e me retorna um valor string aux := floattostr(round(modulo.cds_descmotortriAMP_SCARGA_MAX.value * 100)/100); //Aqui eu tento converter a string em Float,porem minha variavel aux2 continua zerada após esta linha ser executada. aux2 := StrToFloat(aux);Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Setembro 25, 2008 Denunciar Share Postado Setembro 25, 2008 Como eu vou fazer uma comparação,eu preciso que este valor seja em Float.Quando eu tento converter ele para Float,minha variavel fica zerada,tem algum por que ?por exemplo://Aqui faz o arredamento e me retorna um valor stringaux := floattostr(round(modulo.cds_descmotortriAMP_SCARGA_MAX.value * 100)/100);//Aqui eu tento converter a string em Float,porem minha variavel aux2 continua zerada após esta linha ser executada.aux2 := StrToFloat(aux);( minha variavel aux2 continua zerada após esta linha ser executada ) isto só ocorre se a variavel aux foi zerada em algum lugar.. verifiqueoutro exemplo:procedure TForm1.Button1Click(Sender: TObject); var Aux : string; Aux2, val : real; begin val := 5.7555555; Aux := floattostr(round(val * 100)/100); label1.Caption := Aux; Aux2 := strtofloat(Aux); label2.Caption := formatfloat(',0.00',Aux2); // Aux = resposta 5,76 // Aux2 = resposta 5,76 end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Silva_henry Postado Setembro 26, 2008 Autor Denunciar Share Postado Setembro 26, 2008 (editado) Olá ,bom dia.Meu problema persiste... =(O código esta assim( nesta sequencia mesmo)://Aqui são variaveis do tipo string,eu estou conseguindo arredondar perfeitamente,os resultados são // valores como "3,6", "0,4", exatamente como eu quero.Obs,estou usando debug stramp_max := FloatTostr(round(modulo.cds_descmotortriAMP_SCARGA_MAX.value * 100) /100); stramp_min := FloatTostr(round(modulo.cds_descmotortriAMP_SCARGA_MIN.value * 100) /100); strkw_max := FloatToStr(round(modulo.cds_descmotortriKW_SCARGA_MAX.value * 100) /100); strkw_min := FloatToStr(round(modulo.cds_descmotortriKW_SCARGA_MIN.value * 100) /100);//Aqui é onde eu tento converter as " strings arredondadas" em float,para eu poder realizar algumas comparações futuramente.Porém todas estas variaveis se resultam sempre em 0,ou seja,não converte a variavel string ( que esta com os valores arredondados certinho porque eu debuguei elas ) amp_max := StrtoFloat(stramp_max); amp_min := StrToFloat(stramp_min); kw_max := StrtoFloat(strkw_max); kw_min := StrTofloat(strkw_min);.Em nenhum outro momento eu zero estas variaveis,isto que é estranho... Sera que é por causa da "virgula" no lugar do "ponto" ? Pensei nesta possibilidade agora no decorrer desta mensagem.Vou tentar fazer um laço e trocar a virgula pelo ponto para ver o que acontece.Qualquer idéia que alguém tiver me ajudem ai,rsrs.Obrigado// EDITADO// O lance de trocar a virgula pelo ponto também não tem nada a ver,não deu certo.O engraçado foi que eu tentei simular o mesmo passo em um form limpo de outro projeto,e o problema não ocorre...a variavel não fica zerada,meu código acima segue uma sequencia,não cai em nenhum outro lugar o ponteiro,porém com o debug eu vejo os valores retornando zero,aff,isto ta me tirando o sono já,rsrsObrigadoAbraços Editado Setembro 26, 2008 por Silva_henry Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Silva_henry Postado Setembro 26, 2008 Autor Denunciar Share Postado Setembro 26, 2008 ConseguiiiiEncontrei o problema amigos,muito obrigado pela ajuda.Resultava 0 (zero) porque eu não estava usando o valor das minhas variaveis amp_max,amp_min,kw_max,kw_min depois das conversões.Apartir do momento em que eu usei elas após a conversão,o valor deixou de ser 0 (zero ).Por exemplo :amp_max := StrtoFloat(stramp_max);amp_min := StrToFloat(stramp_min);kw_max := StrtoFloat(strkw_max);kw_min := StrTofloat(strkw_min);Aqui eu atribui a elas o valor arrendondado das variaveis do tipo string.Se meu código terminasse ai,eles continuariam valendo zero,porém se eu usar as 4 variaveis depois desta conversão,elas passam a valor correto.Entenderam ?Após eu atribuir o valor a elas,eu tenho que usar elas em algum lugar,como eu não estava usando,ficava sempre valendo zero,rsrsObrigado pelo grande suporte aqui prestado,se não fosse por ele eu não conseguiria nem ter arredondado.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Silva_henry
Olá pessoal,estou com um pequeno problema.
modulo.cds_descmotormonoAMP_SCARGA_MAX.value
Este campo no meu banco de dados ( Firebird ) é Float
Ele me retorna um valor assim : 3,59999999....
Eu precisava arredondar este valor para 3,6...
Como proceder ? Não posso transformar em String porque eu vou comparar este valor depois...
e assim por diante...
se eu tiver um valor 3,7888 arredonda para 3,8...
Não posso mudar a estrutuda do banco,pois faço calculos que usam 2 ou 3 casas decimais,apenas neste caso tenho que usar 1 casa decimal.
Obrigado
Até mais
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.