0

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

double totalAmount;

该字段的值是通过在多选中选择值后完成的总和来计算的。总和值的功能在控制器中,如下所示:

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 有效,我在运行时看到该字段的更新,但双精度值显示为一个点,而不是用逗号分隔十进制值。事实上,点击保存按钮保存域类的实例后,保存的值不分隔小数,例如:

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

在这个讨论中,如何在 grails 中正确保存双精度类型?我读过类似的问题,但解决方案对我的问题不利。

任何人都可以帮助我吗?

4

2 回答 2

1

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

您可以查看此主题以了解如何发现区域设置的小数分隔符。

要获取用户的区域设置,请使用:

Locale locale = RequestContextUtils.getLocale(request)
于 2013-08-13T02:11:58.900 回答
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""

于 2013-09-17T08:11:02.627 回答