2010-06-23 14 views
6

Si especifica que el tipo de columna ActiveRecord sea decimal, Rails devolverá ese valor de base de datos como un objeto BigDecimal ruby.Columna decimal Ruby on Rails

Mi pregunta es, cuando trabaje con estos campos y realice operaciones matemáticas adicionales sobre ellos, siempre debo usar valores BigDecimal en mis cálculos o si los valores de coma flotante son correctos para usar. No sabía si es una buena práctica mezclar valores de BigDecimal y puntos flotantes en los mismos cálculos.

Ejemplo mixta: BigDecimal.new ('12 0.43 ')/4,2

Mismo tipo Ejemplo: BigDecimal.new ('12 0.43')/BigDecimal.new ('4,2')

La razón que pido es porque estoy un poco tímido de usar flotadores porque necesito precisión decimal. 0.1 + 0.7 no será igual a 0.8 usando flotadores.

Respuesta

2

Ya que estás

... un poco tímido de arma usando flotadores ...

uso BigDecimal. Funciona bien

+1

Sí, creo que debería usar BigDecimal. Mi pregunta es si debo usar BigDecimal para todos los números en los cálculos. Hice algunas pruebas y si haces esto BigDecimal.new ('1.2') + 1.1, el valor de retorno será un float, no un BigDecimal. Entonces, ¿es una buena práctica usar todos los números de BigDecimal cuando se trata de la columna Decimal de ActiveRecords, ya que está usando BigDecimal internamente, por lo que no corre el riesgo de que su cálculo se convierta en un extraño problema de redondeo de flotación? – Dale

+0

Re: BigDecimal.new ('1.2') + 1.1 devuelve float. Tienes razón. Como ese es el caso, asegúrese de operar solo con objetos BigDecimal. Solo conviértalo cuando lo desee. –

+0

Además, recuerde utilizar BigDecimal.new ('0.0') en lugar de 0. –