Иногда типы данных Activerecord сбивают меня с толку. Часто Один из моих вечных вопросов, для данного случая,
Я должен использовать
:decimal
или:float
?
Я часто сталкивался с этой ссылкой ActiveRecord:: decimal vs: float? , но ответы не совсем ясны, чтобы я был уверен:
Я видел много потоков, в которых люди рекомендуют использовать упущение, чтобы никогда не использовать float и всегда использовать десятичную. Я также видел предложения некоторых людей использовать float только для научных приложений.
Вот несколько примеров:
- Геолокации / широта / долгота:
-45.756688
,120.5777777
, ... - Соотношение / процент:
0.9
,1.25
,1.333
,1.4143
, ...
Я использовал :decimal
в прошлом, но я обнаружил, что работа с BigDecimal
объектами в Ruby была излишне неловкой по сравнению с плавающей точкой. Я также знаю, что могу использовать :integer
, например, для представления денег / центов, но это не совсем подходит для других случаев, например, когда количества, в которых точность может меняться со временем.
- Каковы преимущества / недостатки использования каждого?
- Какие бы хорошие эмпирические правила знать, какой тип использовать?
источник
+1.43*2^10
а не+1.43*10^2
?В Rails 3.2.18: десятичное значение превращается в: целое число при использовании SQLServer, но оно прекрасно работает в SQLite. Переход на: float решил эту проблему для нас.
Извлеченный урок: «Всегда используйте однородные базы данных разработки и развертывания!»
источник
В Rails 4.1.0 я столкнулся с проблемой сохранения широты и долготы в базе данных MySql. Он не может сохранить большое число дробей с типом данных с плавающей точкой. И я меняю тип данных на десятичный и работаю для меня.
источник
decimal(13,9)
достаточно для широты и долготы. @ ScottW: Я не помню, но если Postgres использует плавающие объекты IEEE, это только «работает нормально», потому что у вас не возникло проблем ... Это недостаточный формат для широты и долготы. В конечном итоге у Yo будут ошибки в младших разрядах.