A veces, los tipos de datos de Activerecord me confunden. Err, a menudo. Una de mis preguntas eternas es, para un caso dado,
¿Debo usar
:decimal
o:float
?
A menudo me he encontrado con este enlace, ActiveRecord:: decimal vs: float? , pero las respuestas no son lo suficientemente claras para estar seguro:
He visto muchos hilos en los que la gente recomienda de plano que nunca use flotante y siempre use decimal. También he visto sugerencias de algunas personas para usar float solo para aplicaciones científicas.
Aquí hay algunos casos de ejemplo:
- Geolocalización / latitud / longitud:
-45.756688
,120.5777777
, ... - Relación / porcentaje:
0.9
,1.25
,1.333
,1.4143
, ...
Lo he usado :decimal
en el pasado, pero descubrí que tratar con BigDecimal
objetos en Ruby era innecesariamente incómodo en comparación con un flotador. También sé que puedo usar :integer
para representar dinero / centavos, por ejemplo, pero no encaja en otros casos, por ejemplo, cuando las cantidades en las que la precisión podría cambiar con el tiempo.
- ¿Cuáles son las ventajas / desventajas de usar cada uno?
- ¿Cuáles serían algunas buenas reglas generales para saber qué tipo usar?
fuente
+1.43*2^10
lugar de+1.43*10^2
?En Rails 3.2.18,: decimal se convierte en: entero cuando se usa SQLServer, pero funciona bien en SQLite. El cambio a: float resolvió este problema por nosotros.
La lección aprendida es "¡siempre use bases de datos homogéneas de desarrollo e implementación!"
fuente
En Rails 4.1.0, me he enfrentado a un problema al guardar latitud y longitud en la base de datos MySql. No puede guardar un número de fracción grande con el tipo de datos flotante. Y cambio el tipo de datos a decimal y funciona para mí.
fuente
decimal(13,9)
es suficiente para la latitud y longitud. @ScottW: No recuerdo, pero si Postgres usa flotadores IEEE, solo "funciona bien" porque no ha tenido problemas ... TODAVÍA. Es un formato insuficiente para latitud y longitud. Eventualmente tendrá errores en los dígitos menos significativos.