Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails中的绑定请求参数:BigDecimal精度损失_Grails_Bigdecimal - Fatal编程技术网

Grails中的绑定请求参数:BigDecimal精度损失

Grails中的绑定请求参数:BigDecimal精度损失,grails,bigdecimal,Grails,Bigdecimal,我在将请求参数绑定到域类中的BigDecimal字段时遇到了一些问题 当我在duration字段中键入25.75时,数据被正确序列化,并且duration以正确的精度传递给请求中的控制器 控制器操作: def save() { // params.duration is 25.75 (debugged and printed to the console) def entry = new Entry(params) // entry.duration is now 25

我在将请求参数绑定到域类中的BigDecimal字段时遇到了一些问题

当我在duration字段中键入25.75时,数据被正确序列化,并且duration以正确的精度传递给请求中的控制器

控制器操作:

def save() {
    // params.duration is 25.75 (debugged and printed to the console)
    def entry = new Entry(params)
    // entry.duration is now 25
    // the precision is lost..
    // 125.25 converts to 125
    // 1.75 converts to 1
    ...
}
域类:

class Entry {
    BigDecimal duration

    static constraints = {
        duration(min: 0.01G, max: 168.00G, scale: 2)
    }
}
MySQL数据库中的列类型是DECIMAL(5,2)

我错过了什么明显的东西吗

编辑:
使用Grails 2.2.0版。

您的区域设置/浏览器语言是什么?数字解析依赖于语言环境。所以,如果您的区域设置的十进制分隔符是“,”(逗号)而不是“,”,那么在数据绑定后将得到整数(如您所述)。尝试将区域设置更改为“en”,然后再次检查。

谢谢您的回答。我的浏览器区域设置为“en_US”。十进制分隔符是一个句点(“.”),而不是请求参数中的逗号(“,”),在服务器端也是如此。无论如何,转换应该是独立于语言环境的,因为该应用程序在世界各地都有使用。我刚刚在一个新的应用程序(Grails 2.2.0)上尝试了这一点,但我没有看到这种行为。在控制器中,数据在保存前(
params.duration
)和保存后(
entryInstance.duration
)都正确显示。在
列表
显示
页面以及直接从数据库(mysql)中进行选择时也要进行更正。你试过grails clean检查一下吗?Kelly,谢谢你的输入。是的,我清理、编译过,甚至尝试过一个新项目。解析/数据绑定是否会以某种方式依赖于服务器的区域设置?这看起来很奇怪。可能是你的MySQL语言环境问题吗?无论如何,我都不是MySQL的专家,所以这可能毫无意义。但Grails似乎没有任何问题。