浮點數是指小數分隔符後帶有零或多位數字的數字。例如 -2.4、0.1、3.14、16.984025 和 1024.0。
不同的浮點數型別可以在數字分隔符後儲存不同位數的數字,這就是所謂的精確度。這表示把 PI 存進single時,只會存下前 6 到 9 位數字(最後一位會四捨五入)。
Clojure 中的浮點數會讀取為 Double;加上 M 後綴則會讀取為 BigDecimal。
Double:8 位元組(約 15 到 17 位數的精確度)。這是最常見的型別。寫成 2.45。BigDecimal:任意精確度的整數未標度值,以及 32 位元的整數標度。寫成 2.45M。在這項練習中,你會處理儲蓄帳戶。每年,你的儲蓄帳戶餘額會根據利率更新。銀行給你的利率取決於你帳戶裡有多少錢(也就是餘額):
1000元時,利率為 0.5%。1000元且低於5000元時,利率為 1.621%。5000元時,利率為 2.475%。每年,在儲蓄帳戶餘額更新之前,政府允許你將一定比例的錢捐給慈善機構,而且免稅。因為你是個好人,如果年底時你的餘額是正的,你會捐出這個金額的兩倍給慈善機構,並向下取整到最接近的整數元。
你有三項任務,每一項都會涉及你的餘額和它的利率。
實作interest-rate函式,根據指定的餘額計算利率:
(interest-rate 200.75M)
;;=> 0.5
注意,回傳的值是Double。
實作annual-balance-update函式,計算年度餘額更新,並將利率納入考量:
(annual-balance-update 200.75M)
;;=> 201.75375M
注意,回傳的值是BigDecimal。
實作amount-to-donate函式,根據餘額和政府允許的免稅百分比,計算要捐多少錢給慈善機構:
(def balance 550.5M)
(def tax-free-percentage 2.5)
(amount-to-donate balance tax-free-percentage)
;;=> 27
注意,回傳的值是int。