如何将浮点形式的时间(hh.mm)除以红宝石中的整数?

Emm*_*anu 1 ruby ruby-on-rails

我正在尝试将浮点数形式(hh.mm)的时间除以整数。例如,1.30 x 2必须为00.45。有没有简单的方法可以做到这一点?

Ste*_*fan 7

使用浮点表达h.mm有点不寻常。通常,您将使用字符串进行格式化。

但是,我将从浮点值中提取小时和分钟开始。为此,我将使用以下命令将float转换为字符串format

time = 1.3
time_str = format('%.2f', time)
#=> "1.30"
Run Code Online (Sandbox Code Playgroud)

然后,我将split在字符串处.获取小时部分和分钟部分,并调用to_i将其转换为实际的整数:(我在map这里使用,之后也可以调用h = h.to_i/ m = m.to_i

h, m = time_str.split('.').map(&:to_i)
h #=> 1
m #=> 30
Run Code Online (Sandbox Code Playgroud)

现在我们有了数字1并且30为整数,我们可以轻松地以分钟为单位计算总持续时间:

duration = h * 60 + m
#=> 90
Run Code Online (Sandbox Code Playgroud)

然后,我将持续时间除以2(或任何值):

duration /= 2
#=> 45
Run Code Online (Sandbox Code Playgroud)

并使用divmod:将其转换回小时和分钟(它一次返回两个值)

h, m = duration.divmod(60)
h #=> 0
m #=> 45
Run Code Online (Sandbox Code Playgroud)

我们可以将它们格式化为字符串:

format('%02d.%02d', h, m)
#=> "00.45"
Run Code Online (Sandbox Code Playgroud)

或将其转换回浮点数:

time = h + m.fdiv(100)
#=> 0.45
Run Code Online (Sandbox Code Playgroud)

可以这样格式化:

format('%05.2f', time)
#=> "00.45"
Run Code Online (Sandbox Code Playgroud)