Я совершенно новичок в рельсах, и у меня есть небольшой вопрос о том, что некоторые десятичные значения из моей базы данных отображаются как слегка отличающиеся на очень небольшую величину в выходных данных индекса/показа скаффолдинга по умолчанию в браузере. У меня есть элемент, в котором конкретное значение атрибута равно 9,12, и я могу подтвердить, что оно правильно хранится в моей базе данных sqlite3 в виде десятичного числа. Однако на индексной странице или странице показа элемента это дает мне 9.1199999999999999
Просто чтобы еще больше запутать, если я попытаюсь отредактировать элемент, форма покажет точное значение 9,12 в соответствующем поле.
Немного поигравшись, я вижу, что другие значения (например, 9,11, 9,13, 9,14, 9,123) дадут мне аналогичные ошибки точности в выводе html, в то время как многие другие (например, 9,1, 9,09, 9,15, 9,121) будут отображаться как они должен.
Теперь я понимаю, что такое поведение ожидается при использовании значений с плавающей запятой из-за того, как они хранятся в двоичном формате, но я понимаю, что у десятичного числа не должно быть таких причуд, связанных с точностью. Если это правда, то все, что я могу предположить, это то, что проблема связана с Rails. Так может ли кто-нибудь просветить меня о том, что вызывает такое поведение?
Очевидно, я могу обновить свое представление, чтобы оно отображалось правильно:
<%= number_with_precision(item.value, precision: 2) %>
но, учитывая, что каждый элемент, который я посеял в базе данных, имеет множество десятичных значений, которые все отображаются просто отлично, я не хочу делать это для каждого десятичного значения, когда проблема кажется скорее исключением, чем правилом.
Между прочим, я использую Rails 4.0.0beta1 с Ruby 2.0.0 (чтобы следовать последнему изданию книги Agile Web Development with Rails). Мне было бы интересно узнать, происходит ли то же самое в Rails 3.2.
Редактировать: по иронии судьбы все отображается правильно, если я обновляю базу данных, чтобы вместо этого использовать тип с плавающей запятой.