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
Другие вопросы по тегам