Почему деление в Ruby возвращает целое число вместо десятичного значения?
Например:
9 / 5 #=> 1
но я ожидал 1.8. Как я могу получить правильный десятичный (не целочисленный) результат? Почему он возвращает 1 вообще?
Ответ 1
Выполнение целочисленного деления. Вы можете сделать одно из чисел Float, добавив .0:
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
Ответ 2
Выполнение целочисленного деления. Вы можете использовать to_f, чтобы заставить вещи перейти в режим с плавающей запятой:
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
Это также работает, если ваши значения являются переменными, а не литералами. Преобразование одного значения в float достаточно, чтобы принудить целое выражение к арифметике с плавающей запятой.
Ответ 3
Существует также метод Numeric#fdiv, который вы можете использовать вместо этого:
Таким образом, вы получаете точное деление (класс Rational), пока не решите применить операцию, которая не может быть выражена как рациональная, например Math.sin.
Ответ 6
Измените 5 на 5.0. Вы получаете целочисленное деление.
Ответ 7
Fixnum # to_r здесь не упоминается, он был введен с Ruby 1.9. Он преобразует Fixnum в рациональную форму. Ниже приведены примеры его использования. Это также может дать точное деление, если все используемые числа - Fixnum.
a = 1.to_r #=> (1/1)
a = 10.to_r #=> (10/1)
a = a / 3 #=> (10/3)
a = a * 3 #=> (10/1)
a.to_f #=> 10.0
Пример, когда поплавок, работающий на рациональном числе, скрывает результат для плавания.