Melhorando a precisão de valores flutuantes em python[RESOLVIDO]

13. Re: Melhorando a precisão de valores flutuantes em python[RESOLVIDO]

aguamole
aguamole

(usa KUbuntu)

Enviado em 26/11/2024 - 14:59h


dark777 escreveu:
Alqueires..: 1.49 alq.

Esse valor é incorreto, devesse arredondar sempre para o valor mais próximo.


  


14. Re: Melhorando a precisão de valores flutuantes em python[AJUDA]

Morpheus
Minions

(usa Nenhuma)

Enviado em 26/11/2024 - 15:44h

dark777 escreveu:

aguamole escreveu:

Ele esta reclamando do ponto flutuante ou ele está reclamando dos valores?


na verdade estou tentando evitar isso:

Alqueires..: 1.4999999999999998 alq.


Fazendo com que retorne corretamente o valor abaixo:

Alqueires..: 1.49 alq.
ou
Alqueires..: 1.50 alq.


Apenas as duas casas decimais seriam arredondadas para cima, então "1.4999999" retornaria "1.50" arredondado para cima, e para o valor "1.5000002" retornaria "1.50", e nao algo como "1.51", tentei adicionar "0.01" mas nao funciona em todos os casos pois as proporçoes mudam conforme cada medida.

wiki.anon




No JAVA tem um recurso de arredondadar para cima ou para baixo será que no Python tem que importar alguma coisa?


Visão geral criada por IA


Para arredondar um número para baixo em Python, pode usar a função math.floor(). O resultado do método floor sempre será um valor inteiro.
Para limitar o número de casas decimais em Python, pode usar a função round(). Esta função recebe dois argumentos: o número que deseja arredondar e o número de casas decimais que deseja.
Para arredondar para duas casas decimais, pode usar o método str.format(). Por exemplo, :.2f é usado entre colchetes para especificar que o número seja arredondado para duas casas decimais.
O arredondamento de números de ponto flutuante pode apresentar imprecisões, pois o processador trabalha com ponto flutuante binário e não decimal. Para ter precisão exata, pode usar um tipo decimal ou algo parecido.


Alterei isso:

print(f"Hectares...: {math.floor(hectares)} ha.")



Ex:

Dimensões área quadrada (Proporção 1:1):
Largura....: 491.93 metros
Comprimento: 491.93 metros
Hectares...: 24.2 ha.
Alqueires..: 10.0 alq.
Metros²....: 242000 m²


Dimensões área retângular (Proporção 1.5:1):
Largura....: 402 metros
Comprimento: 602 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 242000 m²


Dimensões área retângular (Proporção 1.21:1):
Largura....: 447 metros
Comprimento: 541 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2:1):
Largura....: 348 metros
Comprimento: 696 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2.21:1):
Largura....: 331 metros
Comprimento: 731 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2.42:1):
Largura....: 316 metros
Comprimento: 765 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2.5:1):
Largura....: 311 metros
Comprimento: 778 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 3:1):
Largura....: 284 metros
Comprimento: 852 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 4:1):
Largura....: 246 metros
Comprimento: 984 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241998 m²


Dimensões área retângular (Proporção 4.5:1):
Largura....: 232 metros
Comprimento: 1044 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241998 m²


Dimensões área retângular (Proporção 4.84:1):
Largura....: 224 metros
Comprimento: 1082 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241997 m²


Dimensões área retângular (Proporção 5:1):
Largura....: 220 metros
Comprimento: 1100 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241997 m²


depois alterei

# print(f"Hectares...: {hectares} ha.")
print(f"Hectares...: {math.floor(hectares)} ha.")



15. Re: Melhorando a precisão de valores flutuantes em python[AJUDA]

César
dark777

(usa Debian)

Enviado em 26/11/2024 - 17:43h

Minions escreveu:

dark777 escreveu:

aguamole escreveu:

Ele esta reclamando do ponto flutuante ou ele está reclamando dos valores?


na verdade estou tentando evitar isso:

Alqueires..: 1.4999999999999998 alq.


Fazendo com que retorne corretamente o valor abaixo:

Alqueires..: 1.49 alq.
ou
Alqueires..: 1.50 alq.


Apenas as duas casas decimais seriam arredondadas para cima, então "1.4999999" retornaria "1.50" arredondado para cima, e para o valor "1.5000002" retornaria "1.50", e nao algo como "1.51", tentei adicionar "0.01" mas nao funciona em todos os casos pois as proporçoes mudam conforme cada medida.

wiki.anon




No JAVA tem um recurso de arredondadar para cima ou para baixo será que no Python tem que importar alguma coisa?


Visão geral criada por IA


Para arredondar um número para baixo em Python, pode usar a função math.floor(). O resultado do método floor sempre será um valor inteiro.
Para limitar o número de casas decimais em Python, pode usar a função round(). Esta função recebe dois argumentos: o número que deseja arredondar e o número de casas decimais que deseja.
Para arredondar para duas casas decimais, pode usar o método str.format(). Por exemplo, :.2f é usado entre colchetes para especificar que o número seja arredondado para duas casas decimais.
O arredondamento de números de ponto flutuante pode apresentar imprecisões, pois o processador trabalha com ponto flutuante binário e não decimal. Para ter precisão exata, pode usar um tipo decimal ou algo parecido.


Alterei isso:

print(f"Hectares...: {math.floor(hectares)} ha.")



Ex:

Dimensões área quadrada (Proporção 1:1):
Largura....: 491.93 metros
Comprimento: 491.93 metros
Hectares...: 24.2 ha.
Alqueires..: 10.0 alq.
Metros²....: 242000 m²


Dimensões área retângular (Proporção 1.5:1):
Largura....: 402 metros
Comprimento: 602 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 242000 m²


Dimensões área retângular (Proporção 1.21:1):
Largura....: 447 metros
Comprimento: 541 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2:1):
Largura....: 348 metros
Comprimento: 696 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2.21:1):
Largura....: 331 metros
Comprimento: 731 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2.42:1):
Largura....: 316 metros
Comprimento: 765 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2.5:1):
Largura....: 311 metros
Comprimento: 778 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 3:1):
Largura....: 284 metros
Comprimento: 852 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 4:1):
Largura....: 246 metros
Comprimento: 984 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241998 m²


Dimensões área retângular (Proporção 4.5:1):
Largura....: 232 metros
Comprimento: 1044 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241998 m²


Dimensões área retângular (Proporção 4.84:1):
Largura....: 224 metros
Comprimento: 1082 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241997 m²


Dimensões área retângular (Proporção 5:1):
Largura....: 220 metros
Comprimento: 1100 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241997 m²


depois alterei

# print(f"Hectares...: {hectares} ha.")
print(f"Hectares...: {math.floor(hectares)} ha.")


Usei este método da função matemática mas acontece que se colocarmos "1.5" o método floor irá fazer isso:

metros_quadrados = metrosQuadrados(1.5)

Dimensões área retângular (Proporção 5:1):
Largura....: 85 metros
Comprimento: 426 metros
Hectares...: 3 ha.
Alqueires..: 1 alq.
Metros²....: 36300 m²


Quando o correto é isso:

Dimensões área retângular (Proporção 5:1):
Largura....: 85 metros
Comprimento: 426 metros
Hectares...: 3.63 ha.
Alqueires..: 1.5 alq.
Metros²....: 36300 m²


Notei que os resultados da sua sugestão retornou a metragem correta para cada medida andei vendo como melhorar isso na versão do meu programa mas nao entendi direito onde tenho que mudar..
wiki.anon


16. Re: Melhorando a precisão de valores flutuantes em python[RESOLVIDO]

Morpheus
Minions

(usa Nenhuma)

Enviado em 26/11/2024 - 23:53h


dark777 escreveu:


Minions escreveu:

dark777 escreveu:

aguamole escreveu:

Ele esta reclamando do ponto flutuante ou ele está reclamando dos valores?


na verdade estou tentando evitar isso:

Alqueires..: 1.4999999999999998 alq.


Fazendo com que retorne corretamente o valor abaixo:

Alqueires..: 1.49 alq.
ou
Alqueires..: 1.50 alq.


Apenas as duas casas decimais seriam arredondadas para cima, então "1.4999999" retornaria "1.50" arredondado para cima, e para o valor "1.5000002" retornaria "1.50", e nao algo como "1.51", tentei adicionar "0.01" mas nao funciona em todos os casos pois as proporçoes mudam conforme cada medida.

wiki.anon




No JAVA tem um recurso de arredondadar para cima ou para baixo será que no Python tem que importar alguma coisa?


Visão geral criada por IA


Para arredondar um número para baixo em Python, pode usar a função math.floor(). O resultado do método floor sempre será um valor inteiro.
Para limitar o número de casas decimais em Python, pode usar a função round(). Esta função recebe dois argumentos: o número que deseja arredondar e o número de casas decimais que deseja.
Para arredondar para duas casas decimais, pode usar o método str.format(). Por exemplo, :.2f é usado entre colchetes para especificar que o número seja arredondado para duas casas decimais.
O arredondamento de números de ponto flutuante pode apresentar imprecisões, pois o processador trabalha com ponto flutuante binário e não decimal. Para ter precisão exata, pode usar um tipo decimal ou algo parecido.


Alterei isso:

print(f"Hectares...: {math.floor(hectares)} ha.")



Ex:

Dimensões área quadrada (Proporção 1:1):
Largura....: 491.93 metros
Comprimento: 491.93 metros
Hectares...: 24.2 ha.
Alqueires..: 10.0 alq.
Metros²....: 242000 m²


Dimensões área retângular (Proporção 1.5:1):
Largura....: 402 metros
Comprimento: 602 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 242000 m²


Dimensões área retângular (Proporção 1.21:1):
Largura....: 447 metros
Comprimento: 541 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2:1):
Largura....: 348 metros
Comprimento: 696 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2.21:1):
Largura....: 331 metros
Comprimento: 731 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2.42:1):
Largura....: 316 metros
Comprimento: 765 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 2.5:1):
Largura....: 311 metros
Comprimento: 778 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 3:1):
Largura....: 284 metros
Comprimento: 852 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241999 m²


Dimensões área retângular (Proporção 4:1):
Largura....: 246 metros
Comprimento: 984 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241998 m²


Dimensões área retângular (Proporção 4.5:1):
Largura....: 232 metros
Comprimento: 1044 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241998 m²


Dimensões área retângular (Proporção 4.84:1):
Largura....: 224 metros
Comprimento: 1082 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241997 m²


Dimensões área retângular (Proporção 5:1):
Largura....: 220 metros
Comprimento: 1100 metros
Hectares...: 24 ha.
Alqueires..: 10.0 alq.
Metros²....: 241997 m²


depois alterei

# print(f"Hectares...: {hectares} ha.")
print(f"Hectares...: {math.floor(hectares)} ha.")


Usei este étodo da função matemática mas acontece que se colocarmos "1.5" o método floor irá fazer isso:

metros_quadrados = metrosQuadrados(1.5)

Dimensões área retângular (Proporção 5:1):
Largura....: 85 metros
Comprimento: 426 metros
Hectares...: 3 ha.
Alqueires..: 1 alq.
Metros²....: 36300 m²


Quando o correto é isso:

Dimensões área retângular (Proporção 5:1):
Largura....: 85 metros
Comprimento: 426 metros
Hectares...: 3.63 ha.
Alqueires..: 1.5 alq.
Metros²....: 36300 m²


Notei que os resultados da sua sugestão retornou a metragem correta para cada medida andei vendo como melhorar isso na versão do meu programa mas nao entendi direito onde tenho que mudar..
wiki.anon




Se esta funcionando ai a resposta esta na parte onde tem a palavra "...alterei..." no topico anterior



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts