Почему рациональные числа внезапно появляются в JSON/Rails

Я использую Rails для генерации JSON для библиотеки диаграмм JavaScript (High Charts). Есть несколько мест, где я использую целочисленную арифметику для вычисления процентов в гистограммах, как это (упрощенный пример):

def to_json
 data.map{|numerator, denominator| numerator * 100 / denominator }
end

Этот сервер работает без проблем в течение нескольких лет, но только в последние пару недель он иногда начинает отказывать, потому что он генерирует Rational номер вместо Fixnum (например. 2700/50 вместо 54). Это ломается, потому что парсер JSON в браузере не понимает рациональное число.

Исправить легко (позвоните to_i или же round на результат), но я не понимаю, почему это внезапно начало происходить через 4 года и почему это происходит только в некоторых экземплярах Passenger на одном сервере в моей веб-ферме. Веб-машины идентичны (насколько я знаю).

Мой вопрос из четырех частей:

  1. Есть ли более идиоматический способ вычисления процентов в Ruby?
  2. Каковы правила, когда Ruby генерирует рациональное, а не фикснум?
  3. Почему это вдруг начало происходить?
  4. Почему это может произойти только на некоторых экземплярах моего сервера rails?

Детали версии:

  • рубин 2.2.2
  • Рельсы 3.2.22
  • пассажиро-5.0.21
  • Ubuntu 12.04.5 LTS

0 ответов

Другие вопросы по тегам