Parfois, les types de données Activerecord me confondent. Euh, souvent. L'une de mes questions éternelles est, pour un cas donné,
Dois-je utiliser
:decimal
ou:float
?
J'ai souvent rencontré ce lien, ActiveRecord:: decimal vs: float? , mais les réponses ne sont pas assez claires pour que je sois certain:
J'ai vu de nombreux threads où les gens recommandent de ne pas utiliser float et d'utiliser toujours décimal. J'ai également vu des suggestions de certaines personnes d'utiliser le flotteur uniquement pour des applications scientifiques.
Voici quelques exemples:
- Géolocalisation / latitude / longitude:
-45.756688
,120.5777777
, ... - Ratio / pourcentage:
0.9
,1.25
,1.333
,1.4143
, ...
J'ai utilisé :decimal
dans le passé, mais j'ai trouvé que traiter des BigDecimal
objets dans Ruby était inutilement gênant par rapport à un flotteur. Je sais également que je peux utiliser :integer
pour représenter l'argent / cents, par exemple, mais cela ne convient pas tout à fait à d'autres cas, par exemple lorsque des quantités dont la précision peut changer avec le temps.
- Quels sont les avantages / inconvénients de l'utilisation de chacun?
- Quelles seraient les bonnes règles de base pour savoir quel type utiliser?
la source
+1.43*2^10
plutôt que+1.43*10^2
?Dans Rails 3.2.18,: décimal se transforme en: entier lors de l'utilisation de SQLServer, mais cela fonctionne très bien dans SQLite. Passer à: float a résolu ce problème pour nous.
La leçon apprise est "utilisez toujours des bases de données de développement et de déploiement homogènes!"
la source
Dans Rails 4.1.0, j'ai rencontré un problème avec l'enregistrement de la latitude et de la longitude dans la base de données MySql. Il ne peut pas enregistrer un grand nombre de fractions avec un type de données flottant. Et je change le type de données en décimal et travaille pour moi.
la source
decimal(13,9)
est suffisant pour la latitude et la longitude. @ScottW: Je ne me souviens pas, mais si Postgres utilise des flottants IEEE, cela "fonctionne très bien" car vous n'avez pas rencontré de problèmes ... ENCORE. C'est un format insuffisant pour la latitude et la longitude. Yo finira par avoir des erreurs dans les chiffres les moins significatifs.