验证测试将BigDecimal 0.0评估为null

时间:2014-10-15 12:34:41

标签: grails

我正在使用Grails 2.4.3

我有一个名为BigDecimal类型的属性,其定义如下:

@BindUsing({ obj, source ->
  if (source['value']) {
        source['value']?.toBigDecimal()
    } else {
        null
    }
})
BigDecimal value

现在如果我在约束中使用此值,我会得到以下奇怪的行为:

if (obj.value)
如果value设置为0.0,则

计算结果为false 对于任何其他值(例如0.1)

,它的计算结果为true

0.0实际上在数据库表中存储为0.0,但验证器显然认为它为空。

或者使用“value”作为属性的名称可能有问题吗?

1 个答案:

答案 0 :(得分:0)

实际上问题是Groovy如何评估真相。 documentation有以下示例:

assert !0 //yeah, 0s are false, like in Perl
assert 1  //this is also true for all other number types

数字,在您的情况下为0.0,当它们为零时评估为false。如果您正在尝试检查空值,那么在这种情况下您应该检查空值。

if (obj.value == null)