Подтвердить что ты не робот

Ruby отказывается правильно разделить

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

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

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

4b9b3361

Ответ 1

Он выполняет целочисленное деление.

В принципе, 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

Ответ 2

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

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

>> (25 / 50) * 100
=> 0
>> (25.0 / 50) * 100
=> 50.0