In Elixir gibt es zwei verschiedene Arten von Zahlen: Ganzzahlen und Gleitkommazahlen.
Ganzzahlen sind Zahlen ohne Nachkommateil.
integer = 3
# => 3
Gleitkommazahlen sind Zahlen mit einer oder mehreren Ziffern hinter dem Dezimaltrennzeichen. Sie verwenden das 64-Bit-Gleitkommaformat mit doppelter Genauigkeit.
float = 3.45
# => 3.45
In den Modulen Integer und Float findest du nützliche Funktionen für die Arbeit mit diesen Typen. Die grundlegenden arithmetischen Operatoren sind im Modul Kernel definiert.
Ganzzahlen und Gleitkommazahlen können in einem einzigen arithmetischen Ausdruck gemischt werden. Sobald eine Gleitkommazahl in einem Ausdruck vorkommt, ist auch das Ergebnis eine Gleitkommazahl.
2 * 3
# => 6
2 * 3.0
# => 6.0
Bei einer Division ist das Ergebnis jedoch immer eine Gleitkommazahl, selbst wenn nur Ganzzahlen verwendet werden.
6 / 2
# => 3.0
Um eine Gleitkommazahl in eine Ganzzahl umzuwandeln, kannst du den Dezimalteil mit trunc/1 verwerfen.
In dieser Übung schreibst du Code, der einem Freelancer dabei hilft, mit der Projektleitung zu kommunizieren. Deine Aufgabe ist es, ein paar Hilfsfunktionen bereitzustellen, mit denen sich Tages- und Monatssätze schnell berechnen lassen, optional mit einem gegebenen Rabatt.
Zuerst legen wir ein paar Regeln zwischen dem Freelancer und der Projektleitung fest:
Manchmal bietet der Freelancer an, einen Rabatt auf seinen Tagessatz zu gewähren (zum Beispiel für seine treuesten Kunden oder für gemeinnützige Kunden).
Rabatte werden als Bruchzahlen modelliert, die Prozentwerte darstellen, zum Beispiel 25.0 (25 %).
Implementiere eine Funktion namens daily_rate, die den Tagessatz aus einem Stundensatz als Parameter berechnet.
Der Vertrag legt fest, dass ein Tag 8 abrechenbare Stunden hat.
FreelancerRates.daily_rate(60)
# => 480.0
Der zurückgegebene Tagessatz sollte eine Gleitkommazahl sein.
Implementiere eine Funktion apply_discount, die den Preis nach einem Rabatt berechnet.
FreelancerRates.apply_discount(150, 10)
# => 135.0
Der Rückgabewert sollte immer eine Gleitkommazahl sein und in keiner Weise gerundet werden.
Implementiere eine Funktion monthly_rate, die den rabattierten Monatssatz berechnet.
Sie nimmt zwei Parameter entgegen: einen Stundensatz und den Rabatt in Prozent.
FreelancerRates.monthly_rate(77, 10.5)
# => 12130
Der zurückgegebene Monatssatz sollte auf die nächste Ganzzahl aufgerundet werden.
Implementiere eine Funktion days_in_budget, die ein Budget, einen Stundensatz und einen Rabatt entgegennimmt und berechnet, wie viele vollständige Arbeitstage damit abgedeckt sind.
FreelancerRates.days_in_budget(20000, 80, 11.0)
# => 35.1
Die zurückgegebene Anzahl an Tagen sollte auf eine Nachkommastelle abgerundet werden.
Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.