Elixir 裡有兩種不同的數字:整數和浮點數。
整數就是沒有小數的數字。
integer = 3
# => 3
浮點數是指小數點後還有一或多位數字的數字。它們採用 64 位元雙精度浮點格式。
float = 3.45
# => 3.45
在Integer和Float模組中,你可以找到一些處理這些型別的實用函式。基本的算術運算子則定義在Kernel模組裡。
整數和浮點數可以在同一個算術運算式中混用。在運算式中使用浮點數,能確保結果也會是浮點數。
2 * 3
# => 6
2 * 3.0
# => 6.0
不過,進行除法時,結果一定都是浮點數,即使只用到整數也一樣。
6 / 2
# => 3.0
要把浮點數轉成整數,可以用trunc/1捨去小數部分。
在這個練習中,你會撰寫程式碼,協助自由工作者與專案經理溝通。你的任務是提供幾個工具,以便快速計算每日與每月費率,並可選擇套用指定的折扣。
我們先為自由工作者與專案經理之間建立幾條規則:
有時,自由工作者會針對每日費率提供折扣(例如給最忠誠的客戶或非營利客戶)。
折扣以代表百分比的小數來表示,例如 25.0(25%)。
實作一個名為daily_rate的函式,接收每小時費率作為參數,並計算每日費率。合約定義一天有 8 個可計費小時。
FreelancerRates.daily_rate(60)
# => 480.0
回傳的每日費率應為浮點數。
實作一個apply_discount函式,計算折扣後的價格。
FreelancerRates.apply_discount(150, 10)
# => 135.0
回傳值應一律為浮點數,且不進行任何四捨五入。
實作一個monthly_rate函式,計算折扣後的每月費率。它接收兩個參數:每小時費率和折扣百分比。
FreelancerRates.monthly_rate(77, 10.5)
# => 12130
回傳的每月費率應無條件進位(取上界)至最接近的整數。
實作一個days_in_budget函式,接收預算、每小時費率和折扣,並計算這樣能涵蓋多少個完整的工作天。
FreelancerRates.days_in_budget(20000, 80, 11.0)
# => 35.1
回傳的天數應無條件捨去(取下界)至小數點後一位。