2012-02-25 85 views
5

我試圖在一個全新的grails 2.0應用程序中堅持一個BigDecimal,而且它並不像我期待的那樣行事。Grails 2.0與堅持BigDecimal的問題

我提出一個新的應用程序稱爲l2bigdec並添加此領域類:

package l2bigdec 

class PlayMe { 
    BigDecimal imStupidOrSomething 
    static constraints = { 
    } 
} 

然後我把這個代碼在引導:

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

它打印:

0.912345 
0.91 

爲什麼兩次都不打印0.912345?我不明白BigDecimal嗎?

回答

10

規模的限制,可以控制這個:

... 
BigDecimal myNum 

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

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

+0

如果其實我是想將BigDecimal,而不是圓形的浮動,它需要保持每個數字我給它?這在2.0中不再可能嗎? – Mikey 2012-02-25 00:38:08

+0

我可以設置一個更大的默認比例,所以我不必通過更新每個BigDecimal的項目來尋找? – Mikey 2012-02-25 00:39:06

+0

如果你的目標是一個特定的RDBMS,有些可以使用任意精度的類型(例如PostgreSQL中的'NUMERIC')否則,我不知道保留任意數字的簡單方法。我也不知道有一個地方可以設置默認比例。如果您的BigDecimal屬性名稱在類中相似,則可以使用'grails.gorm.default.constraints',如下所述:http://grails.org/doc/latest/ref/Constraints/Usage.html – 2012-02-25 00:59:37