2012-02-25 10 views
5

Staram się utrzymywać BigDecimal w zupełnie nowej aplikacji grails 2.0 i nie zachowuję się tak, jak się spodziewam.Problemy z Grails 2.0 z uporczywym BigDecimalem

robię nowa aplikacja o nazwie l2bigdec i dodać do tej klasy domeny:

package l2bigdec 

class PlayMe { 
    BigDecimal imStupidOrSomething 
    static constraints = { 
    } 
} 

Następnie umieścić ten kod w 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 = { 
    } 
} 

która drukuje:

0.912345 
0.91 

Dlaczego nie drukuje się za każdym razem 0.912345? Czy nie rozumiem BigDecimal?

Odpowiedz

10

Ograniczenie skala pozwala kontrolować to:

... 
BigDecimal myNum 

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

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

+0

co jeśli faktycznie chcą BigDecimal a nie zaokrąglone pływak i musi zachować każdą cyfrę daję? Czy nie jest to już możliwe w wersji 2.0? – Mikey

+0

Czy mogę ustawić większą domyślną skalę, aby nie musieć przeglądać mojego projektu aktualizując każdy BigDecimal? – Mikey

+0

Jeśli kierujesz się konkretnym RDBMS, niektóre z nich mają dowolne typy precyzji, których możesz użyć (na przykład 'NUMERIC' w PostgreSQL). W przeciwnym razie nie ma łatwego sposobu na zachowanie dowolnych cyfr. Nie jestem również świadomy pojedynczego punktu, aby ustawić domyślną skalę. Jeśli twoje nazwy właściwości BigDecimal są podobne na różnych klasach, możesz użyć 'grails.gorm.default.constraints', opisanego tutaj: http://grails.org/doc/latest/ref/Constraints/Usage.html –