Grails - Inputfields 为十进制数显示一个点 ('.') 而不是 (',')

Grails - Inputfields shows a dot ('.') instead of (',') for decimal numbers

在 edit.gsp 中,我有十进制数字的输入字段,十进制数字显示为“3.123”,如果我保存它:由于小数点错误,我收到错误消息!它期待一个','。我的所在地是瑞典。 所以我必须手动用逗号替换所有十进制数字的点。

我整整一周都在四处寻找,找不到任何解决方案。 Grails 不应该在保存中期望逗号时保持一致并显示逗号吗? 它应该适用于 BigDecimal 和 double。

我有 Grails 3.2.4

这是来自编辑表单的 "g:field" 示例:

    Bredd: <g:field type="number decimal" name="width" min="20" max="300" required="Y" value="${request1?.width}" style="width: 4em"/>

那么,我能做什么?

manually replacing dots 听起来很可怕,而且可能是错误的方法。

移动了答案片段

因此,由于我今天遇到了类似的问题,因此更新了答案,可能是相反的。由于其他原因验证失败时通过数字 3333 发送,验证失败后该字段中的数字已变为 3,333 。如果旧的验证问题得到解决,它现在将因数字中的逗号而失败。 原因竟然是:

<g:textField value="${fieldValue(bean: instance, field: 'someField')}"

在 return 将此更改为

时将数字更改为 3,333
value="${instance.someField}"

以上是@larand 面临的实际问题

我会将输入字段width存储为短

所以 :

Class MyClass {

 //if you are storing a number like 123 (non decimal)
 Short width
 //if you are storing 12.12 which becomes 1212 when stored
 Integer width

 BigDecimal getDecimalWidth() {
    return new BigDecimal(this.width).movePointRight(2).setScale(2)
 }
 void setWidth(BigDecimal decimal) {
   this.width=new BigDecimal(decimal).movePointLeft(2).setScale(2)
 }
//unsure but think this should work
  Integer getWidthInteger() {
    return this.width as int
 }
 void setWidth(Integer integer) {
   this.width=(byte)integer
 }
}

这将为您提供使用 ${instance.decimalWidth} 或整数获取短值的方法:${instance.widthInteger}

当你的领域是 actually numeric:

<g:formatNumber number="${myCurrencyAmount}" type="currency" currencyCode="EUR" />

对我来说,这似乎比切碎你认为的数字更直接、更清晰

第一次验证问题后,输入的数字是 3333。所以这可能是您的问题?不确定,因为你说的是​​点