Например:
9 / 5 #=> 1
но я ожидал 1.8
. Как я могу получить правильный десятичный (нецелый) результат? Почему это возвращается1
вообще ?
Например:
9 / 5 #=> 1
но я ожидал 1.8
. Как я могу получить правильный десятичный (нецелый) результат? Почему это возвращается1
вообще ?
def method; a - b/8; end
вернул бы результат вычисления из метода, поскольку последнее выражение в вызове метода является возвращаемым значением.Ответы:
Это делает целочисленное деление. Вы можете сделать одно из чисел а
Float
, добавив.0
:источник
.to_f
Ответ лучше , если вы разделив две переменные , которые содержат целые числа, напримерa.to_f / b
. Если вы буквально делите два жестко запрограммированных целых числа (что, вероятно, странно), тогда использование9.0 / 5
подойдет.Это делает целочисленное деление. Вы можете использовать,
to_f
чтобы заставить вещи в режиме с плавающей запятой:Это также работает, если ваши значения являются переменными, а не литералами. Преобразование одного значения в число с плавающей точкой является достаточным для приведения всего выражения к арифметике с плавающей запятой.
источник
Есть также
Numeric#fdiv
метод, который вы можете использовать вместо:источник
Вы можете проверить это с помощью irb:
источник
Вы можете включить
mathn
модуль ruby .Таким образом, вы сможете сделать деление в обычном режиме.
Таким образом, вы получаете точное деление (класс Rational), пока не решите применить операцию, которая, например, не может быть выражена как рациональная
Math.sin
.источник
Изменение
5
To5.0
. Вы получаете целочисленное деление.источник
Fixnum # to_r здесь не упоминается, он появился с версии 1.9. Он превращает Fixnum в рациональную форму. Ниже приведены примеры его использования. Это также может дать точное деление, если все используемые числа являются Fixnum.
Пример, в котором число с плавающей запятой, работающее с рациональным числом, покрывает результат с плавающей точкой.
источник