Percursos
/
Elixir
Elixir
/
Programa
/
Números de vírgula flutuante
Nú

Números de vírgula flutuante em Elixir

8 exercícios

Sobre Números de vírgula flutuante

Em Elixir há dois tipos diferentes de números: os números inteiros e os números de vírgula flutuante.

Os números de vírgula flutuante são números com um ou mais algarismos depois do separador decimal. Usam o formato de vírgula flutuante de precisão dupla de 64 bits.

float = 3.45
# => 3.45

O Elixir também suporta a notação científica para números de vírgula flutuante.

1.25e-2
# => 0.0125

Erros de arredondamento

Os números de vírgula flutuante têm má fama por causa dos seus erros de arredondamento.

0.1 + 0.2
# => 0.30000000000000004

No entanto, este tipo de erros não é específico do Elixir. Acontecem em todas as linguagens de programação. Isto deve-se ao facto de todos os dados nos nossos computadores serem armazenados e processados como código binário. Em binário, só é possível representar exatamente as frações cujo denominador pode ser escrito como 2^n (por exemplo, 1/4, 3/8, 5/16). As outras frações são representadas por aproximações.

# 3/4
Float.ratio(0.75)
# => {3, 4}

# 3/5
Float.ratio(0.6)
# => {5404319552844595, 9007199254740992}

Podes saber mais sobre este problema em 0.30000000000000004.com. A página Float Toy tem uma boa explicação gráfica de como os bits de um número de vírgula flutuante são convertidos num valor de vírgula flutuante concreto.

Comparação

Os números inteiros e os números de vírgula flutuante podem ser considerados iguais (==) se tiverem o mesmo valor. No entanto, como são de tipos diferentes, nunca são estritamente iguais (===).

1 == 1.0
# => true

1 === 1.0
# => false

Conversão

Os números inteiros e os números de vírgula flutuante podem ser misturados numa única expressão aritmética. Usar um número de vírgula flutuante numa expressão garante que o resultado também é um número de vírgula flutuante.

2 * 3
# => 6

2 * 3.0
# => 6.0

Os números de vírgula flutuante podem ser arredondados (round), arredondados por excesso (ceil) ou arredondados por defeito (floor).

Para arredondar um número de vírgula flutuante para outro número de vírgula flutuante, usa as funções do módulo Float (Float.round, Float.ceil, Float.floor). Para obteres um número inteiro, usa as funções do módulo Kernel (round, ceil, floor).

Outra forma de transformar um número de vírgula flutuante num número inteiro é cortar a parte decimal com trunc.

Float.ceil(5.2)
# => 6.0

ceil(5.2)
# => 6

trunc(5.2)
# => 5
Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Números de vírgula flutuante

A prática está bloqueada

Desbloqueia mais 4 exercícios para praticares Números de vírgula flutuante