From: akr@... Date: 2019-09-19T09:22:23+00:00 Subject: [ruby-core:94987] [Ruby master Feature#16021] floor/ceil/round/truncate should accept a :step argument Issue #16021 has been updated by akr (Akira Tanaka). `Time.now.floor(step: 3600)` doesn't work well with leap seconds. Also, we want floor/round/ceil for month and year but one month and one year is not fixed number of seconds. So, step with number of seconds doesn't for month and year. ---------------------------------------- Feature #16021: floor/ceil/round/truncate should accept a :step argument https://bugs.ruby-lang.org/issues/16021#change-81607 * Author: Dan0042 (Daniel DeLorme) * Status: Feedback * Priority: Normal * Assignee: * Target version: ---------------------------------------- These rounding methods currently accept a number of (decimal) digits, but a more general mechanism would allow rounding to the nearest �, multiple of 5, etc. Equivalent to e.g. `((num / step.to_f).round * step)` ``` ruby 12.3456.floor(step: 0.2) #=> 12.2 12.3456.round(step: 0.2) #=> 12.4 12.3456.floor(step: 0.2) #=> 12.4 12.3456.floor(step: 0.2) #=> 12.2 ``` IMHO this should also apply to Time#floor/round/ceil ``` ruby Time.now.floor(step: 3600) #=> current hour Time.now.round(step: 3600) #=> nearest hour Time.now.ceil(step: 3600) #=> next hour ``` We can also consider that instead of `:step` , `:by` or `:to` might be quite readable. ``` ruby 12.3456.round(by: 0.2) #=> 12.4 12.3456.round(to: 0.2) #=> 12.4 ``` -- https://bugs.ruby-lang.org/ Unsubscribe: