Existem dois tipos diferentes de números em Elixir: números inteiros e números de ponto flutuante.
Números inteiros são números sem parte fracionária.
integer = 3
# => 3
Números de ponto flutuante são números com um ou mais dígitos depois do separador decimal. Eles usam o formato de ponto flutuante de precisão dupla de 64 bits.
float = 3.45
# => 3.45
Nos módulos Integer e Float, você encontra algumas funções úteis para trabalhar com esses tipos. Os operadores aritméticos básicos estão definidos no módulo Kernel.
Números inteiros e números de ponto flutuante podem ser misturados em uma única expressão aritmética. Usar um número de ponto flutuante em uma expressão garante que o resultado também será um número de ponto flutuante.
2 * 3
# => 6
2 * 3.0
# => 6.0
No entanto, ao fazer uma divisão, o resultado sempre será um número de ponto flutuante, mesmo que você use apenas números inteiros.
6 / 2
# => 3.0
Para converter um número de ponto flutuante em um número inteiro, você pode descartar a parte decimal com trunc/1.
Neste exercício, você vai escrever código para ajudar uma pessoa freelancer a se comunicar com um gerente de projetos. Sua tarefa é fornecer alguns utilitários para calcular rapidamente valores diários e mensais, opcionalmente com um desconto dado.
Primeiro, estabelecemos algumas regras entre quem é freelancer e o gerente de projetos:
Às vezes, o freelancer oferece um desconto sobre o valor diário (por exemplo, para os clientes mais fiéis ou para clientes sem fins lucrativos).
Os descontos são modelados como números fracionários que representam porcentagens, por exemplo, 25.0 (25%).
Implemente uma função chamada daily_rate para calcular o valor diário a partir de um valor por hora como parâmetro.
O contrato define que um dia tem 8 horas faturáveis.
FreelancerRates.daily_rate(60)
# => 480.0
O valor diário retornado deve ser um número de ponto flutuante.
Implemente uma função apply_discount para calcular o preço depois de aplicar um desconto.
FreelancerRates.apply_discount(150, 10)
# => 135.0
O valor retornado deve ser sempre um número de ponto flutuante, sem arredondamento de nenhum tipo.
Implemente uma função monthly_rate para calcular o valor mensal com desconto.
Ela recebe dois parâmetros: um valor por hora e o desconto em porcentagem.
FreelancerRates.monthly_rate(77, 10.5)
# => 12130
O valor mensal retornado deve ser arredondado para cima (teto) para o número inteiro mais próximo.
Implemente 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 retornado deve ser arredondado para baixo (piso) até uma casa decimal.
Crie sua conta no Exercism para aprender e dominar Elixir com 58 conceitos168 exercícios e mentoria humana de verdade, tudo de graça.