Elixirには、整数と浮動小数点数の2種類の数値があります。
整数は、小数部分のない数です。
integer = 3
# => 3
浮動小数点数は、小数点以下の桁が1つ以上ある数です。64ビット倍精度浮動小数点形式を使います。
float = 3.45
# => 3.45
IntegerモジュールとFloatモジュールには、これらの型を扱うための便利な関数が用意されています。基本的な算術演算子は、Kernelモジュールで定義されています。
整数と浮動小数点数は、1つの計算式の中で混ぜて使えます。式の中で浮動小数点数を使うと、結果も必ず浮動小数点数になります。
2 * 3
# => 6
2 * 3.0
# => 6.0
ただし、割り算では、整数だけを使っても結果は必ず浮動小数点数になります。
6 / 2
# => 3.0
浮動小数点数を整数に変換するには、trunc/1で小数部分を切り捨てます。
この演習では、フリーランサーがプロジェクトマネージャーとやり取りできるよう、コードを書きます。日額と月額の料金をすばやく計算するためのいくつかのユーティリティを用意するのが、ここでの課題です。割引を指定して適用することもできます。
まず、フリーランサーとプロジェクトマネージャーの間で、いくつかのルールを決めておきます。
フリーランサーは、日額に割引を適用することがあります(たとえば、最も忠実な顧客や非営利の顧客向けです)。
割引は、パーセンテージを表す小数として扱います。たとえば25.0(25%)です。
daily_rateという関数を実装しましょう。この関数は、時給を入力として受け取り、日額を計算します。契約では、1日は請求可能な8時間と定められています。
FreelancerRates.daily_rate(60)
# => 480.0
返される日額は小数にします。
割引後の価格を計算するapply_discount関数を実装しましょう。
FreelancerRates.apply_discount(150, 10)
# => 135.0
返される値は常に小数とし、一切丸めないようにします。
割引後の月額を計算するmonthly_rate関数を実装しましょう。時給と、パーセントで表した割引の2つを入力として受け取ります。
FreelancerRates.monthly_rate(77, 10.5)
# => 12130
返される月額は、最も近い整数に切り上げます(天井をとります)。
予算、時給、割引を受け取り、それで何日分まるまる働けるかを計算するdays_in_budget関数を実装しましょう。
FreelancerRates.days_in_budget(20000, 80, 11.0)
# => 35.1
返される日数は、小数点以下1桁に切り捨てます(床をとります)。