Às vezes, os tipos de dados do Activerecord me confundem. Erre, frequentemente. Uma das minhas eternas perguntas é, para um dado caso,
Devo usar
:decimal
ou:float
?
Eu sempre encontrei esse link, ActiveRecord:: decimal vs: float? , mas as respostas não são suficientemente claras para que eu tenha certeza:
Eu já vi muitos tópicos em que as pessoas recomendam flat out para nunca usar float e sempre usar decimal. Também vi sugestões de algumas pessoas para usar o float apenas para aplicações científicas.
Aqui estão alguns exemplos de casos:
- Geolocalização / latitude / longitude:
-45.756688
,120.5777777
, ... - Rácio / porcentagem:
0.9
,1.25
,1.333
,1.4143
, ...
Eu usei :decimal
no passado, mas achei que lidar com BigDecimal
objetos em Ruby era desnecessariamente estranho em comparação com um flutuador. Também sei que posso usar :integer
para representar dinheiro / centavos, por exemplo, mas não se encaixa em outros casos, por exemplo, quando quantidades em que a precisão pode mudar com o tempo.
- Quais são as vantagens / desvantagens de usar cada um?
- Quais seriam algumas boas regras práticas para saber qual tipo usar?
fonte
+1.43*2^10
vez de+1.43*10^2
?No Rails 3.2.18,: decimal se transforma em: número inteiro ao usar o SQLServer, mas funciona bem no SQLite. Mudar para: float resolveu esse problema para nós.
A lição aprendida é "sempre use bancos de dados homogêneos de desenvolvimento e implantação!"
fonte
No Rails 4.1.0, eu enfrentei um problema ao salvar latitude e longitude no banco de dados MySql. Ele não pode salvar um número de fração grande com o tipo de dados flutuante. E mudo o tipo de dados para decimal e trabalhando para mim.
fonte
decimal(13,9)
é suficiente para latitude e longitude. @ ScottW: Não me lembro, mas se o Postgres usa flutuadores IEEE, ele apenas "funciona bem" porque você não teve problemas ... AINDA. É um formato insuficiente para latitude e longitude. Você acabará tendo erros nos dígitos menos significativos.