【问题标题】:Validation test evaluates BigDecimal 0.0 to null验证测试将 BigDecimal 0.0 评估为 null
【发布时间】:2014-10-15 20:53:38
【问题描述】:

我正在使用 Grails 2.4.3

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

@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,但验证器显然认为它为null。

或者使用“值”作为属性的名称是否有问题?

【问题讨论】:

    标签: grails


    【解决方案1】:

    实际上问题在于 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 2021-06-03
      • 1970-01-01
      相关资源
      最近更新 更多