Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Arredondar um numero float


Silva_henry

Pergunta

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

  • 0
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...

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

Link para o comentário
Compartilhar em outros sites

  • 0

Opa,felicidade de pobre dura pouco,rsrs

Outro 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

Link para o comentário
Compartilhar em outros sites

  • 0
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);

( minha variavel aux2 continua zerada após esta linha ser executada ) isto só ocorre se a variavel aux foi zerada em algum lugar.. verifique

outro 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

Link para o comentário
Compartilhar em outros sites

  • 0

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á,rsrs

Obrigado

Abraços

Editado por Silva_henry
Link para o comentário
Compartilhar em outros sites

  • 0

Conseguiiii

Encontrei 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,rsrs

Obrigado pelo grande suporte aqui prestado,se não fosse por ele eu não conseguiria nem ter arredondado.

Abraços

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...