Рубин отказывается правильно делить - PullRequest
12 голосов
/ 19 сентября 2009

Я просто пытаюсь получить процент.

irb(main):001:0> (25 / 50) * 100
=> 0

Это должно определенно равняться 50, как подтвердил мой калькулятор (скопировал и вставил то же уравнение в gcalc). Почему Ruby отказывается это делать?

Ответы [ 2 ]

28 голосов
/ 19 сентября 2009

Делает целочисленное деление.

По сути, 25 - это целое число (целое число), равно как и 50, поэтому, когда вы делите одно на другое, оно дает вам другое целое число.

25 / 50 * 100 = 0.5 * 100 = 0 * 100 = 0

Лучший способ сделать это - сначала умножить, а затем поделить.

25 * 100 / 50 = 2500 / 50 = 50

Вы также можете явно использовать арифметику с плавающей запятой, указав десятичную точку, как в:

25.0 / 50.0 * 100 = 0.5 * 100 = 50
9 голосов
/ 19 сентября 2009

Поскольку вы делите целое число на целое, поэтому результат усекается до целого (0,5 -> 0), а затем умножается на 100.

Но это работает:

>> (25 / 50) * 100
=> 0
>> (25.0 / 50) * 100
=> 50.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...