Grails - 输入字段显示一个点('。')而非(',')表示十进制数

时间:2017-02-04 09:28:25

标签: grails decimal gsp

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

我整整一周都环顾四周,无法在任何地方找到解决方案。 Grails是否应该保持一致,并且在保存中使用逗号时会显示逗号? 它应该适用于BigDecimal和double。

我有Grails 3.2.4

以下是" g:字段"的示例来自编辑表格:

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

那么,我该怎么办?

1 个答案:

答案 0 :(得分:0)

manually replacing dots听起来很恐怖,可能是错误的做法。

围绕

移动了答案片段

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

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

在将此更改为

时,将数字更改为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。所以也许这是您的问题?因为你在谈论点而不确定