Techioz Blog

Ruby - 数値が指定されたパーセンテージ許容誤差の範囲内にあるかどうかを確認するにはどうすればよいですか?

概要

次のケース間隔があるとします。

min_value = 500
max_value = 900

そして、テスト番号があるかどうかを知りたいです。 check_value = 1000 は、min_value と max_value の周囲 25% 以内です。

この特定のケースでは、1000 - 25% は 750、つまり 500 ~ 900 の間にあるため、結果は「はい」になります。

これを行う機能はありますか?

解決策

いいえ、これを行うための組み込みメソッドはありません。それは非常に特殊な/ニッチな問題です。

ただし、カスタム メソッドを定義するのは非常に簡単です。たとえば、次のような場合はどうでしょうか。

def in_range_with_tolerance?(check_value:, min_value:, max_value:, tolerance:)
  allowed_range = (min_value / (1 + tolerance) .. max_value / (1 - tolerance))
  allowed_range.include?(check_value)
end

in_range_with_tolerance?(
  check_value: 1000,
  min_value: 500,
  max_value: 900,
  tolerance: 0.25
)
  # => true

ただし、この allowed_range が実際にどのように定義されているかについては、慎重に検討する必要があるかもしれません。たとえば、900 + 25% == 1125 であるため、上記の最大許容値は実際には 1125 になるべきでしょうか。それとも 1200、1200 - 25% == 900 なので?このようにパーセンテージを使って方程式を書くのは…疑わしいです。