galera como faço para usar somente dois valores após a virgula num float em c??

1. galera como faço para usar somente dois valores após a virgula num float em c??

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/08/2016 - 14:07h

num calculo por exemplo não quero usar 0.423 e sim apenas 0.42


  


2. Re: galera como faço para usar somente dois valores após a virgula num float em c??

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/08/2016 - 14:28h

Se fosse para receber ou exibir dados, seria o caso de se usar uma máscara como "%.2f" na recepção e na exibição dos dados.
Fiquei interessado e estou pensando em uma forma de truncar casa decimal sem ser na recepção e na exibição.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: galera como faço para usar somente dois valores após a virgula num float em c??

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/08/2016 - 15:01h

listeiro_037 escreveu:

Se fosse para receber ou exibir dados, seria o caso de se usar uma máscara como "%.2f" na recepção e na exibição dos dados.
Fiquei interessado e estou pensando em uma forma de truncar casa decimal sem ser na recepção e na exibição.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


tomara que me ajude


4. Re: galera como faço para usar somente dois valores após a virgula num float em c??

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/08/2016 - 00:35h

Números de ponto flutuante geralmente são representados internamente como binários. Isso implica que números decimais dificilmente vão ser representados com exatidão na forma binária. Por exemplo, 0.42f (tipo float), que corresponde matematicamente à fração 42/100, tem de ser expresso em binário como 14092861/33554432, que corresponde ao valor exato .4199999868869781494140625f. Então essa coisa de trabalhar internamente só com duas casas não vai funcionar exatamente como você talvez quisesse.

Dito isso, a forma mais óbvia de eliminar casas decimais não desejadas é multiplicar pela potência de 10 necessária para colocar as casas desejadas à esquerda da vírgula, truncar (ou arredondar) a parte fracionária, e depois dividir pela mesma potência de 10. Por exemplo, a seguinte transformação elimina tudo da terceira casa em diante.

f2=floor(f*100)/100; 


Porém eu volto a alertar sobre a discrepância entre a notação decimal e a representação binária interna. Se você quiser números decimais exatíssimos, terá de trabalhar com alguma biblioteca ou compilador que implemente computação decimal, que não costuma ser o caso dos nossos PCs do dia-a-dia.

Quer ver que curioso? Imagine o valor 0,125, que tem uma fração binária exata (1/8, ou 2 elevado a -3), e também um decimal exato com três casas. Se você aplicar a regra acima para “arredondar” 0,125 para 0,12, vai acabar com um valor decimal inexato, pois ele terá de ser representado pela fração binária mais próxima 16106127/134217728, cujo valor exato é 0,119999997317790985107421875.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts