Grails'scale'丢弃十进制数字

时间:2010-08-20 12:17:20

标签: grails

使用Grails 1.3.4的问题 - 'scale'约束似乎不保留我的小数。 我有一个字段定义为:浮动纬度 我有一个约束:纬度(空白:假,范围:-360.0f..360.0f,比例:6) Oracle 10g字段定义为:NUMBER(10,6)

当我在“创建”或“编辑”中输入值时,正确的值将转到数据库。但是,它永远不会在Show中正确显示。如果我输入10.1234567并更新,则10.123457在数据库中,但10.123显示在显示中。

如果我编辑,该值显示为10.123,如果我更新而不修改它,10.123将存储在数据库中,取代10.123457,即使我从未触及该字段。

如果我将值编辑为10.456789,但将另一个必填字段留空,则生成的带有错误消息的编辑屏幕会将值显示为10.457。

为什么Grails会不断将值舍入为3位数?我也尝试将该字段作为Double,但结果相同。我想也许是Oracle,但我尝试使用默认的dev数据库,结果相同。我想也许是'范围',但我把它拿出来的结果相同。

2 个答案:

答案 0 :(得分:0)

嗯 - 你确定它在数据库查看器中正确显示吗?另外 - 检查您对标签的使用:请参阅http://www.pubbs.net/200908/grails/38057-grails-user-how-does-rounding-of-decimals-work-in-gsp.html

答案 1 :(得分:0)

浪费了太多时间试图解决这个问题,最终使用了snowmanjack建议的解决方案。

fieldValue调用发生的默认数据绑定是截断它。您可以按照此处所述http://grails.org/doc/latest/guide/single.html#dataBinding

编写一个新的数据绑定器,以您希望的方式处理转换

或者您可以使用我使用的懒惰,可能不太安全的方法并直接访问该属性。

我换了。

${fieldValue(bean: countryInstance, field: "latitude")}

${contryInstance.latitude}