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
。所以这可能是您的问题?不确定,因为你说的是点
在 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,333value="${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
。所以这可能是您的问题?不确定,因为你说的是点