我正在使用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)
,它的计算结果为true0.0实际上在数据库表中存储为0.0,但验证器显然认为它为空。
或者使用“value”作为属性的名称可能有问题吗?
答案 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)