Há dois tipos diferentes de números em Elixir: números inteiros e números de vírgula flutuante.
Os números inteiros são números sem parte fracionária.
integer = 3
# => 3
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
Nos módulos Integer e Float podes encontrar algumas funções úteis para trabalhar com esses tipos. Os operadores aritméticos básicos estão definidos no módulo Kernel.
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 será um número de vírgula flutuante.
2 * 3
# => 6
2 * 3.0
# => 6.0
No entanto, ao dividir, o resultado será sempre um número de vírgula flutuante, mesmo que só se usem números inteiros.
6 / 2
# => 3.0
Para converter um número de vírgula flutuante num número inteiro, podes descartar a parte decimal com trunc/1.
Neste exercício vais escrever código para ajudar um freelancer a comunicar com um gestor de projeto. A tua tarefa é fornecer alguns utilitários para calcular rapidamente valores diários e mensais, opcionalmente com um determinado desconto.
Começamos por estabelecer algumas regras entre o freelancer e o gestor de projeto:
Por vezes, o freelancer oferece-se para aplicar um desconto no seu valor diário (por exemplo, para os clientes mais fiéis ou para clientes sem fins lucrativos).
Os descontos são representados por números fracionários que representam percentagens, por exemplo 25.0 (25%).
Implementa uma função chamada daily_rate que calcula o valor diário a partir de um valor por hora recebido como parâmetro.
O contrato define que um dia tem 8 horas faturáveis.
FreelancerRates.daily_rate(60)
# => 480.0
O valor diário devolvido deve ser um número de vírgula flutuante.
Implementa uma função apply_discount que calcula o preço depois de aplicar um desconto.
FreelancerRates.apply_discount(150, 10)
# => 135.0
O valor devolvido deve ser sempre um número de vírgula flutuante, sem qualquer arredondamento.
Implementa uma função monthly_rate que calcula o valor mensal com desconto.
Recebe dois parâmetros: um valor por hora e o desconto em percentagem.
FreelancerRates.monthly_rate(77, 10.5)
# => 12130
O valor mensal devolvido deve ser arredondado por excesso (arredondar para cima) para o número inteiro mais próximo.
Implementa uma função days_in_budget que recebe um orçamento, um valor por hora e um desconto, e calcula quantos dias completos de trabalho isso cobre.
FreelancerRates.days_in_budget(20000, 80, 11.0)
# => 35.1
O número de dias devolvido deve ser arredondado por defeito (arredondar para baixo), com uma casa decimal.
Inscreve-te no Exercism para aprenderes e dominares Elixir com 58 conceitos168 exercícios, e mentoria humana real, tudo grátis.