2012-02-25 16 views
5

Sto cercando di mantenere un BigDecimal in una nuova app grails 2.0, e non si comporta affatto come mi aspetto.Grails 2.0 problemi con persistente BigDecimal

Faccio una nuova applicazione chiamata l2bigdec e aggiungere questa classe di dominio:

package l2bigdec 

class PlayMe { 
    BigDecimal imStupidOrSomething 
    static constraints = { 
    } 
} 

Poi ho messo questo codice nella bootstrap:

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 = { 
    } 
} 

che stampa:

0.912345 
0.91 

Perché non stampa 0,912345 entrambe le volte? Non capisco BigDecimal?

risposta

10

Il vincolo scala permette di controllare questo:

... 
BigDecimal myNum 

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

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

+0

Che cosa succede se io in realtà voglio un BigDecimal e non un galleggiante rotondo e ha bisogno di preservare ogni cifra lo do? Non è più possibile in 2.0? – Mikey

+0

Posso impostare una scala di default più ampia in modo da non dover cercare attraverso il mio progetto l'aggiornamento di ogni BigDecimal? – Mikey

+0

Se stai bersagliando un particolare RDBMS, alcuni hanno tipi di precisione arbitraria che puoi usare ('NUMERIC' in PostgreSQL, per esempio) Altrimenti, non è un modo semplice per cui sono consapevole di conservare cifre arbitrarie. Inoltre, non sono a conoscenza di un singolo punto per impostare la scala predefinita. Se i tuoi nomi di proprietà BigDecimal sono simili tra le classi, potresti usare 'grails.gorm.default.constraints', qui descritto: http://grails.org/doc/latest/ref/Constraints/Usage.html –

Problemi correlati