In Elixir esistono due tipi diversi di numeri: i numeri interi e i numeri in virgola mobile.
I numeri interi sono numeri senza parte decimale.
integer = 3
# => 3
I numeri in virgola mobile hanno una o più cifre dopo il separatore decimale. Usano il formato a virgola mobile a doppia precisione a 64 bit.
float = 3.45
# => 3.45
Nei moduli Integer e Float puoi trovare alcune funzioni utili per lavorare con questi tipi. Gli operatori aritmetici di base sono definiti nel modulo Kernel.
I numeri interi ed i numeri in virgola mobile possono essere combinati in un'unica espressione aritmetica. Usare un numero in virgola mobile in un'espressione garantisce che anche il risultato sarà un numero in virgola mobile.
2 * 3
# => 6
2 * 3.0
# => 6.0
Tuttavia, quando si esegue una divisione, il risultato è sempre un numero in virgola mobile, anche se si usano solo numeri interi.
6 / 2
# => 3.0
Per convertire un numero in virgola mobile in un numero intero, puoi scartare la parte decimale con trunc/1.
In questo esercizio scriverai codice per aiutare un freelance a comunicare con un project manager. Il tuo compito è fornire alcune utilità per calcolare rapidamente le tariffe giornaliere e mensili, eventualmente con uno sconto specificato.
Stabiliamo prima alcune regole tra il freelance e il project manager:
A volte il freelance propone di applicare uno sconto sulla propria tariffa giornaliera (per esempio per i clienti più fedeli o per i clienti senza scopo di lucro).
Gli sconti sono modellati come numeri frazionari che rappresentano percentuali, per esempio 25.0 (25%).
Implementa una funzione chiamata daily_rate per calcolare la tariffa giornaliera data una tariffa oraria come parametro.
Il contratto stabilisce che un giorno ha 8 ore fatturabili.
FreelancerRates.daily_rate(60)
# => 480.0
La tariffa giornaliera restituita deve essere un numero in virgola mobile.
Implementa una funzione apply_discount per calcolare il prezzo dopo uno sconto.
FreelancerRates.apply_discount(150, 10)
# => 135.0
Il valore restituito deve essere sempre un numero in virgola mobile, senza alcun arrotondamento.
Implementa una funzione monthly_rate per calcolare la tariffa mensile scontata.
Prende due parametri: una tariffa oraria e lo sconto in percentuale.
FreelancerRates.monthly_rate(77, 10.5)
# => 12130
La tariffa mensile restituita deve essere arrotondata per eccesso (prendi il ceiling) all'intero più vicino.
Implementa una funzione days_in_budget che prende in ingresso un budget, una tariffa oraria e uno sconto, e calcola a quante giornate di lavoro complete corrispondono.
FreelancerRates.days_in_budget(20000, 80, 11.0)
# => 35.1
Il numero di giornate restituito deve essere arrotondato per difetto (prendi il floor) a una cifra decimale.
Iscriviti a Exercism per imparare e padroneggiare Elixir con 58 concetti168 esercizi e il mentoring di persone reali, tutto gratis.