LoginSignup
0
0

More than 1 year has passed since last update.

【RUBY】.floorメソッドを用いて小数点の切り捨てを行う

Last updated at Posted at 2022-11-28

はじめに

プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

前提

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に変える方法などがあります。

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0