Цілочисельне ділення у Ruby: чому 6 / 4 дорівнює 1

Обкладинка допису: Цілочисельне ділення у Ruby: чому 6 / 4 дорівнює 1
ЗмістНатисність на посилання, щоб перейти до потрібного місця
У Ruby, коли ви ділите два цілі числа (Integer), результат теж буде цілим числом. Тому:
6 / 4
повертає 1, а не 1.5. Ruby просто відкидає дробову частину - це так зване цілочисельне ділення.

Чому так відбувається

  • 6 і 4 - обидва об’єкти класу Integer.
  • Оператор / між двома цілими числами повертає Integer, обрізаючи десяткову частину.
6.class   # => Integer
4.class   # => Integer
6 / 4     # => 1

Як отримати правильний результат з десятковою частиною

Варіантів кілька. Розглянемо по черзі.
Як отримати правильний результат з десятковою частиною:
6.0 / 4   # => 1.5
6 / 4.0   # => 1.5
Використовувати метод fdiv. Метод fdiv виконує ділення і завжди повертає Float, навіть якщо обидва числа цілі. Це зручно, коли потрібно точне дробове ділення без явного перетворення типу.
6.fdiv(4) # => 1.5
Явне перетворення типу (to_f). Метод to_f перетворює число на Float. Після цього ділення автоматично виконується як з числами з плаваючою комою, і результат теж буде Float. Також можна перетворювати дільник.
6.to_f / 4   # => 1.5
Якщо коротко:
Цілочисельне ділення (Integer / Integer) обрізає дробову частину.
Щоб отримати число з плаваючою комою (Float), потрібно:
  • використати Float у діленні (6.0 / 4)
  • або метод fdiv (6.fdiv(4))
Ще трохи прикладів:
# Цілочисельне ділення
p 7 / 2       # => 3

# Ділення з Float
p 7.0 / 2     # => 3.5
p 7 / 2.0     # => 3.5
p 7.fdiv(2)   # => 3.5
p 7.to_f / 2  # => 3.5

Цей допис поки що не має жодних доповнень від автора/ки.

Як працюють масиви в Ruby: практичні приклади each, map, select, inject, reduce, filter_map
28 жовт., 10:38

Як працюють масиви в Ruby: практичні приклади each, map, select, inject, reduce, filter_map

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Як працює self, protected і private (Ruby)
28 жовт., 13:52

Як працює self, protected і private (Ruby)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
28 жовт., 14:42

Як працює &:to_s у Ruby і що таке Symbol#to_proc

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке Proc і Lambda в Ruby?
28 жовт., 15:57

Що таке Proc і Lambda в Ruby?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що відбувається, якщо викликати [1, 2, 3].map(&Person)
29 жовт., 17:54

Що відбувається, якщо викликати [1, 2, 3].map(&Person)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Singleton class (eigenclass) у Ruby: що це і навіщо потрібно
29 жовт., 18:29

Singleton class (eigenclass) у Ruby: що це і навіщо потрібно

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
==, equal?, eql?, === у Ruby: що перевіряють і коли використовувати
29 жовт., 20:47

==, equal?, eql?, === у Ruby: що перевіряють і коли використовувати

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Include, Extend, Prepend у Ruby: як вони працюють і в чому різниця
29 жовт., 21:20

Include, Extend, Prepend у Ruby: як вони працюють і в чому різниця

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska