はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。
前提
ECサイトのポイント付与サービスを考えならがら、.floorメソッドの使い方を学びます。
購入金額が999円以下の場合、3%のポイント
購入金額が1000円以上の場合、5%のポイント
このように付与されるポイントを出力するメソッドを作成。
ただし誕生日の場合はポイントが5倍になります。
誕生日の場合はtrue, 誕生日でない場合はfalseで表します。
また、小数点以下をすべてのポイント計算が終わったあとに切り捨てる。
呼び出し方:
calculate_points(amount, is_birthday)
出力例:
calculate_points(500, false) → ポイントは15点です
calculate_points(2000, false) → ポイントは100点です
calculate_points(3000, true) → ポイントは750点です
.floorメソッドとは
irb(main):001:0> 3.1.floor
=> 3
irb(main):002:0> 3.9.floor
=> 3
「3.1」「3.9」のようにメソッドの前に指定すると、小数点を切り捨ててくれます。
但し、負の数を扱う場合、予想外の結果になる場合がある。
puts -3.5.floor # => -3 になってほしかったのに、-4 になる。
前提を元にメソッドを作成
def calculate_points(amount, is_birthday)
if amount <= 999
point = amount * 0.03
else
point = amount * 0.05
end
end
まず、購入金額が999円以下なのかまたは1000円以上なのかを判断し、2~6行目で処理しています。
そして、購入金額に対して0.03または0.05をかけて、ポイント数を計算して変数pointに代入しています。
def calculate_points(amount, is_birthday)
if amount <= 999
point = amount * 0.03
else
point = amount * 0.05
end
if is_birthday
point = point * 5
end
end
その後に、is_birthdayがtrueの場合すなわち誕生日の場合は、直前で定義した変数pointに5をかける処理を行います。
最後に、point.floorとしてポイントの小数点以下を切り捨て、獲得したポイント数を出力しています。
def calculate_points(amount, is_birthday)
if amount < 1000
point = amount * 0.03
else
point = amount * 0.05
end
if is_birthday
point = point * 5
end
puts "ポイントは#{point.floor}点です"
end
別解としては、条件式をamount <= 999からamount < 1000に変える方法などがあります。