2012-02-25 13 views
5

Estoy intentando mantener un BigDecimal en una nueva aplicación de grails 2.0, y no se comporta del todo como estoy esperando.Problema de Grails 2.0 con BigDecimal persistente

que hacer una nueva aplicación llamada l2bigdec y añadir esta clase de dominio:

package l2bigdec 

class PlayMe { 
    BigDecimal imStupidOrSomething 
    static constraints = { 
    } 
} 

Luego puse este código en el archivo de arranque:

import l2bigdec.* 
class BootStrap { 

    def init = { servletContext -> 
    def thisThingIHate = new PlayMe(imStupidOrSomething:0.912345).save(failOnError:true) 
    println thisThingIHate.imStupidOrSomething 
    PlayMe.withSession{it.clear()} 
    def getItBack = PlayMe.find{it} 
    println getItBack.imStupidOrSomething 
    } 
    def destroy = { 
    } 
} 

que imprime:

0.912345 
0.91 

¿Por qué no imprime 0.912345 en ambas ocasiones? ¿No entiendo BigDecimal?

Respuesta

10

La restricción de escala le permite controlar esto:

... 
BigDecimal myNum 

static constraints = { 
    myNum(scale: 6) 
} 
... 

http://grails.org/doc/latest/ref/Constraints/scale.html

+0

¿Qué pasa si yo en realidad quiero un BigDecimal y no un flotador redondeada y tiene que conservar todos los dígitos se lo doy? ¿Esto ya no es posible en 2.0? – Mikey

+0

¿Puedo establecer una escala predeterminada más grande para que no tenga que cazar en mi proyecto actualizando cada BigDecimal? – Mikey

+0

Si se dirige a un RDBMS en particular, algunos tienen tipos de precisión arbitraria que puede usar ('NUMERIC' en PostgreSQL, por ejemplo). De lo contrario, no es una manera fácil de conocer para conservar dígitos arbitrarios. Tampoco soy consciente de un solo lugar para establecer la escala predeterminada. Si sus nombres de propiedad BigDecimal son similares en todas las clases, puede usar 'grails.gorm.default.constraints', que se describe aquí: http://grails.org/doc/latest/ref/Constraints/Usage.html –

Cuestiones relacionadas