[英]Ruby - how to find out if a number is within a range with given percentage tolerance?
假設我有這種情況間隔:
min_value = 500
max_value = 900
我想知道是否有測試號碼,例如。 max_value
check_value = 1000
在min_value
和 max_value 的 25% 以內。
在這種特殊情況下,結果將是yes ,因為1000 - 25%
是750
,介於500
到900
之間。
有這樣的 function 嗎?
有這樣的 function 嗎?
不,沒有內置的方法。 這是一個非常具體/利基的問題。
但是,定義自定義方法相當簡單。 例如,如何:
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
是如何實際定義的......例如,上面允許的最大值是否應該是 1125,因為900 + 25% == 1125
; 或 1200,因為1200 - 25% == 900
? 用這樣的百分比寫方程是……可疑的。
在以下情況下,給定范圍 A 的兩個范圍重疊:
例子:
Range A |-----|
|-----| Case 1
|-----| Case 2
|-| Case 1 + 2
|---------| Case 3
仔細觀察規則是:當范圍 B 在范圍 A 結束之前開始並且范圍 B 在范圍 A 開始之后結束時,兩個范圍重疊。
想象范圍 A 為(min_value..max_value)
和范圍 B ((check_value * 0.75)..(check_value * 1.25))
那么您可以將條件簡化為:
min_value <= (check_value * 1.25) && (check_value * 0.75) <= max_value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.