Ruby - нельзя делить со значениями fixnum

Мне нужно рассчитать некоторые значения%, разделив два отдельных числа. Я получил значение счетчиков, которое является классом fixnum. Но в то время как я собираюсь разделить их, он показывает мне 0, независимо от значения счетчика,

<% dueTask = 12 %>
<% aT = 16 %>
<%= (dueTask/aT)*.to_f %>

Здесь Последний результат, показывающий 0.

4 ответа

Решение

Вы можете использовать две разные строки, чтобы получить фактическое значение.

    <% dueTask = 12 %>
    <% aT = 16 %>
    <% result = dueTask/aT.to_f %>
    <%= result %>

В IRB вы можете получить значение, проверив это:

dueTask = 12
aT = 16
dueTask/aT.to_f

но эта техника может не работать, когда вам нужно показать результат в HTML. переменные имеют тип Fixnum (вы можете проверить это с помощью следующей команды в оболочке IRB)

dueTask.class

Выход будет

#=> Fixnum 

Прямо сейчас вы получаете правильный ответ на это разделение 0потому что вы делите 2 числа, которые действуют как целое число, и, следовательно, вы получите целочисленный ответ.

Чтобы получить десятичный ответ от деления, вам нужно преобразовать их во всплывающее, а затем выполнить деление.

dueTask.to_f/aT.to_f

Ваш код будет выглядеть так:

<% dueTask = 12 %>
<% aT = 16 %>
<%= (dueTask.to_f/aT.to_f) %>

Вы должны преобразовать их в float перед делением:

(dueTask.to_f/aT.to_f)

в противном случае вы получите только целую часть деления, которая 0 в этом случае.

То, как вы это делали, деление делалось на целое число, поэтому результатом является целое число. Даже если вы конвертируете его в число с плавающей точкой, вы просто конвертируете результат (в данном случае 0).

Поэтому вам нужно преобразовать хотя бы одно из двух целых чисел в число с плавающей точкой:

<% dueTask = 12 %> 
<% aT = 16 %> 
<%= (dueTask.to_f/aT) %>
Другие вопросы по тегам