Il existe deux types de nombres en Elixir : les entiers et les nombres décimaux.
Les entiers sont des nombres sans partie décimale.
integer = 3
# => 3
Les nombres décimaux comportent un ou plusieurs chiffres après le séparateur décimal. Ils utilisent le format à virgule flottante à double précision sur 64 bits.
float = 3.45
# => 3.45
Dans les modules Integer et Float, on trouve des fonctions utiles pour manipuler ces types. Les opérateurs arithmétiques de base sont définis dans le module Kernel.
Les entiers et les nombres décimaux peuvent être mélangés dans une même expression arithmétique. Si un nombre décimal intervient dans une expression, le résultat sera lui aussi un nombre décimal.
2 * 3
# => 6
2 * 3.0
# => 6.0
En revanche, dans une division, le résultat est toujours un nombre décimal, même si seuls des entiers sont utilisés.
6 / 2
# => 3.0
Pour convertir un nombre décimal en entier, on peut supprimer la partie décimale avec trunc/1.
Dans cet exercice, on va écrire du code pour aider un freelance à communiquer avec un chef de projet. Ton objectif est de fournir quelques outils pour calculer rapidement des tarifs journaliers et mensuels, avec éventuellement une réduction donnée.
On commence par établir quelques règles entre le freelance et le chef de projet :
Il arrive que le freelance propose d'appliquer une réduction sur son tarif journalier (par exemple pour ses clients les plus fidèles ou pour des clients à but non lucratif).
Les réductions sont modélisées par des nombres décimaux représentant des pourcentages, par exemple 25.0 (25 %).
Implémente une fonction appelée daily_rate qui calcule le tarif journalier à partir d'un tarif horaire passé en paramètre.
Le contrat définit qu'un jour compte 8 heures facturables.
FreelancerRates.daily_rate(60)
# => 480.0
Le tarif journalier renvoyé doit être un nombre décimal.
Implémente une fonction apply_discount qui calcule le prix après une réduction.
FreelancerRates.apply_discount(150, 10)
# => 135.0
La valeur renvoyée doit toujours être un nombre décimal, sans aucun arrondi.
Implémente une fonction monthly_rate qui calcule le tarif mensuel après réduction.
Elle prend deux paramètres, un tarif horaire et la réduction en pourcentage.
FreelancerRates.monthly_rate(77, 10.5)
# => 12130
Le tarif mensuel renvoyé doit être arrondi à l'entier supérieur (on prend l'entier du dessus).
Implémente une fonction days_in_budget qui prend un budget, un tarif horaire et une réduction, et qui calcule combien de jours de travail complets cela couvre.
FreelancerRates.days_in_budget(20000, 80, 11.0)
# => 35.1
Le nombre de jours renvoyé doit être arrondi à l'inférieur (arrondi par défaut) à une décimale.
Inscris-toi sur Exercism pour apprendre et maîtriser Elixir avec 58 concepts168 exercices, et un vrai mentorat humain, le tout gratuitement.