Почему рациональные числа внезапно появляются в 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 на одном сервере в моей веб-ферме. Веб-машины идентичны (насколько я знаю).
Мой вопрос из четырех частей:
- Есть ли более идиоматический способ вычисления процентов в Ruby?
- Каковы правила, когда Ruby генерирует рациональное, а не фикснум?
- Почему это вдруг начало происходить?
- Почему это может произойти только на некоторых экземплярах моего сервера rails?
Детали версии:
- рубин 2.2.2
- Рельсы 3.2.22
- пассажиро-5.0.21
- Ubuntu 12.04.5 LTS