grails和double值保存

时间:2013-08-12 14:32:32

标签: grails double gsp

在我的Grails项目中,我有一个带有双字段的Domain Class,如下所示:

double totalAmount;

该字段的值通过在选择多个选择中的值之后完成的总和来计算。 sum值的函数在控制器中,如下所示:

def sumReceiptItems(){



    params.list("receiptItemsSelected").each {i-> println("element "+i)}
    def appList =  params.list("receiptItemsSelected")

    List<ReceiptItem> allSelectedIds = ReceiptItem.findAllByIdInList(params.receiptItemsSelected.split(',')*.toLong())

    def totalAmount = allSelectedIds.amount.sum()

    println("totalAmount is = "+totalAmount)
    render totalAmount as Double        

}

该功能运作良好。在函数调用之后,为了更新GSP页面中的字段,我使用如下的javascript方法:

function updateTotalAmount(name, data, presentNullAsThis){
  if(data !=null)
     document.getElementById(name).value= data;
  else 
     document.getElementById(name).value=presentNullAsThis;
}

javascript工作,我看到在运行时更新字段,但double值用点显示,而不是用逗号分隔十进制值。事实上,在单击“保存”按钮以保存域类的实例后,将保存该值而不分隔小数,例如:

如果fiels中的值为10.50,则存储为1050

在这次讨论中how can save a double type correctly in grails?我读过类似的问题,但解决方案对我的问题不利。

任何人都可以帮助我?

2 个答案:

答案 0 :(得分:1)

带小数分隔符的值取决于用户的当前Locale。通常,您在视图中使用g.formatNumber来正确显示值。

您可以查看this topic如何发现区域设置的小数点分隔符。

要获取用户的区域设置:

Locale locale = RequestContextUtils.getLocale(request)

答案 1 :(得分:0)

我用这种方式解决了这个问题:

  1. 我已按如下方式更新了我的Javascript:

    function updateTotalAmount(name, data, presentNullAsThis)
    {
        var data2 = data.toString().replace(/\./g, ',');
        if(data2 != null) document.getElementById(name).value= data2;
        else document.getElementById(name).value= presentNullAsThis;
    }
    
  2. 我在gsp相关字段中删除了“type =”number“”