2010-06-23 7 views
6

Si vous spécifiez votre type de colonne ActiveRecord comme étant décimal, Rails renverra cette valeur de base de données en tant qu'objet BigDecimal ruby. Ma question est, lorsque je travaille avec ces champs et que j'effectue des maths supplémentaires, dois-je toujours utiliser des valeurs BigDecimal dans mes calculs ou bien utiliser des valeurs à virgule flottante. Je ne savais pas s'il est bon de mélanger les valeurs BigDecimal et Floating Point dans les mêmes calculs.Colonne décimale Ruby on Rails

Exemple mixte: BigDecimal.new (0,43 '12 ')/4.2

même type Exemple: BigDecimal.new (0,43 '12')/BigDecimal.new ('4.2')

La raison pour laquelle je demande C'est parce que je suis un peu timbré d'utiliser des flotteurs parce que j'ai besoin d'une précision décimale. 0.1 + 0.7 ne sera pas égal à 0.8 en utilisant des flotteurs.

Répondre

2

Puisque vous êtes

... un petit pistolet timide en utilisant des flotteurs ...

utilisation BigDecimal. Fonctionne bien

+1

Oui, je pense que je devrais utiliser BigDecimal. Ma question est que je devrais utiliser BigDecimal pour tous les nombres dans les calculs. J'ai fait quelques tests et si vous faites ce BigDecimal.new ('1.2') + 1.1 la valeur de retour sera un float pas un BigDecimal. Donc, est-ce la meilleure pratique à utiliser tous les nombres BigDecimal lorsqu'il s'agit de la colonne ActiveRecords Decimal, car il utilise BigDecimal en interne afin de ne pas risquer que votre calcul se heurte à un problème d'arrondi étrange float? – Dale

+0

Re: BigDecimal.new ('1.2') + 1.1 renvoie float. Tu as raison. Puisque c'est le cas, veillez à n'utiliser que des objets BigDecimal. Convertissez seulement quand vous voulez le sortir. –

+0

Aussi, n'oubliez pas d'utiliser BigDecimal.new ('0.0') plutôt que 0. –