Например:
9 / 5 #=> 1
но я ожидал 1.8
. Как я могу получить правильный десятичный (не целочисленный) результат? Почему он возвращает 1
вообще?
Например:
9 / 5 #=> 1
но я ожидал 1.8
. Как я могу получить правильный десятичный (не целочисленный) результат? Почему он возвращает 1
вообще?
Выполнение целочисленного деления. Вы можете сделать одно из чисел Float
, добавив .0
:
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
Выполнение целочисленного деления. Вы можете использовать to_f
, чтобы заставить вещи перейти в режим с плавающей запятой:
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
Это также работает, если ваши значения являются переменными, а не литералами. Преобразование одного значения в float достаточно, чтобы принудить целое выражение к арифметике с плавающей запятой.
Существует также метод Numeric#fdiv
, который вы можете использовать вместо этого:
9.fdiv(5) #=> 1.8
Вы можете проверить это с помощью irb:
$ irb
>> 2 / 3
=> 0
>> 2.to_f / 3
=> 0.666666666666667
>> 2 / 3.to_f
=> 0.666666666666667
Вы можете включить модуль ruby mathn
.
require 'mathn'
Таким образом, вы сможете нормально выполнять разделение.
1/2 #=> (1/2)
(1/2) ** 3 #=> (1/8)
1/3*3 #=> 1
Math.sin(1/2) #=> 0.479425538604203
Таким образом, вы получаете точное деление (класс Rational), пока не решите применить операцию, которая не может быть выражена как рациональная, например Math.sin
.
Измените 5
на 5.0
. Вы получаете целочисленное деление.
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
Пример, когда поплавок, работающий на рациональном числе, скрывает результат для плавания.
a = 5.to_r #=> (5/1)
a = a * 5.0 #=> 25.0