Использование числа с плавающей точкой для выражения h.mm
немного необычно.Обычно вы используете строки для форматирования.
Однако я бы начал с извлечения часов и минут из значения с плавающей запятой.Для этого я бы преобразовал число с плавающей запятой в строку, используя format
:
time = 1.3
time_str = format('%.2f', time)
#=> "1.30"
Тогда я бы split
строка в .
чтобы получить часть часов и часть минут и позвонить to_i
, чтобы преобразовать их в действительные целые числа: (я использую map
здесь, вы также можете позвонить h = h.to_i
/m = m.to_i
впоследствии)
h, m = time_str.split('.').map(&:to_i)
h #=> 1
m #=> 30
Теперь, когда у нас есть числа 1
и 30
как целые числа, мы можем легко вычислить общую продолжительность в минутах:
duration = h * 60 + m
#=> 90
Iзатем разделил бы продолжительность на 2 (или любое другое значение):
duration /= 2
#=> 45
и преобразовал бы его обратно в часы и минуты, используя divmod
: (он возвращает оба значения одновременно)
h, m = duration.divmod(60)
h #=> 0
m #=> 45
Мы можем отформатировать их в виде строки:
format('%02d.%02d', h, m)
#=> "00.45"
или преобразовать обратно в число с плавающей запятой:
time = h + m.fdiv(100)
#=> 0.45
Которые можно отформатировать так:
format('%05.2f', time)
#=> "00.45"