在Ruby中将float拆分为整数和小数

Joh*_*vda 12 ruby

如果我有一个像3.75的浮点数,我怎么能把它分成整数3和浮点数0.75?

我是否必须将float转换为字符串,然后将字符串拆分为".",然后将这些部分转换为整数和浮动,或者是否有更优雅或"正确"的方法来执行此操作?

Ali*_*kau 22

你可以使用带有参数的Numeric #divmod1:

返回一个数组,其中包含通过将num除以numeric得到的商和模数.

a.divmod 1
=> [3, 0.75]
Run Code Online (Sandbox Code Playgroud)

如果要获得精确值,此方法也可用于BigDecimal:

3.456.divmod 1
=> [3, 0.45599999999999996]

require 'bigdecimal'
div_mod = BigDecimal("3.456").divmod 1
[div_mod[0].to_i, div_mod[1].to_f]
=> [3, 0.456]
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此解决方案与可接受的负数解决方案不同.`-3.75.to_i#=> -3`,但是`-3.75.divmod 1#=> [-4,0.25]` (4认同)

tdf*_*tdf 15

如上所述,您可以使用3.75.to_i获取整数.获得余数的另一种方法是使用%运算符,例如. 3.75 % 1