我想使用BigDecimal在grails 2.0应用程序中存储多个货币值。
我有一个带有BigDecimal字段的域类
Invoice {
BigDecimal amount
}
GSP输入表单字段类似于下一个代码段
<div class="fieldcontain ${hasErrors(bean: invoiceInstance, field: 'amount', 'error')} required">
<label for="amount">
<g:message code="invoiceInstance.amount.label" default="Amount" />
<span class="required-indicator">*</span>
</label>
<g:field type="number" name="amount" required="" value="${invoiceInstance.amount}"/>
</div>
如果我在英语语言环境中工作,一切正常。用户在字段中输入100,并且当提交值时,将100.00发送到服务器。控制器解析如下所示:
invoiceInstance.properties = params
并且英语区域设置的BigDecimal金额为100.00(预期为100欧元)
问题在于,如果用户将语言环境更改为西班牙语并在字段中输入100。字符串100.00被发送到服务器,但解析设置为10000,因为它理解西班牙语数字的小数分隔符是,和。是千分隔符。
我该如何避免这个问题?
答案 0 :(得分:0)
在检查Accept-Language header之前,您可能需要在解析值之前检查用户的语言环境。您可能会创建一个new BigDecimal
,而不是从params天真地构造,而是在标题引用的Locale中传递值。