Rails показывает неверный расчет
[8] pry(#<Plan>)> self[:total_outstanding]||0 / self.dd_amount
=> 10100.0
[9] pry(#<Plan>)> self[:total_outstanding]||0
=> 10100.0
[10] pry(#<Plan>)> self.dd_amount
=> 900.0
[11] pry(#<Plan>)> self[:total_outstanding].to_i||0/self.dd_amount.to_i
=> 10100
self[:total_outstanding].to_i||0/self.dd_amount.to_i должен вернуть 11 вместо 10100, что соответствует значению первого атрибута
Я пытаюсь отладить это в монологе
Когда код запускался, он считал значение 10100, что просто неправильно.
1 ответ
Решение
Оператор ИЛИ (||
) имеет более низкий приоритет, чем оператор деления (/
).
Ruby интерпретирует вашу последнюю строку так:
self[:total_outstanding].to_i || (0/self.dd_amount.to_i)
Это просто вернется self[:total_outstanding].to_i
потому что это истинная ценность.
группа self[:total_outstanding].to_i||0
вместе, как это:
(self[:total_outstanding].to_i||0) / self.dd_amount.to_i