GORM是否存在使用最大前缀的字段启动或浮点字段问题

时间:2013-11-26 08:51:55

标签: mysql grails gorm

我有一个包含两个字段的域类:minscalemaxscale

class TeamRuleAverageStatic extends TeamRule {
    Float minscale; 
    Float maxscale;

}

* 我使用minscale=0.5maxscale=0.9

在数据库中保留记录

当我试图查询它时,我什么都没得到:

TeamRuleAverageStatic.findByMinscaleAndMaxscale(new Float(0.5),new Float(0.9));

我再次尝试,但没有嵌入maxscale:

 TeamRuleAverageStatic.findByMinscale(new Float(0.5));

所以我得到了预期的结果。

我也尝试:

     TeamRule.executeQuery('from TeamRule cu where cu.maxscale = ? and cu.minscale= ?', [new Float(0.9),new Float(0.5)])
// As TeamRule is the class mother of TeamRuleAverageStatic

问题仍然存在。 MAXSCALE似乎是一个以前缀“max”开头的关键字或字段,因为MINSCALE字段的查询效果很好

更新:

我使用phphmyadmin作为GUI手动执行SQL查询的最佳实践,

我遇到了同样的问题。

当我将字段类型更改为Double时,它可以正常工作!的 WEIRD

当然,遇到我的是一个奇怪的IT问题。 FLOAT类型有什么问题?

1 个答案:

答案 0 :(得分:1)

您的问题是由于代表floatdouble值的性质造成的。 两者都用于表示浮点数,其中float表示单精度,double表示双精度数。

MySQL对单精度值使用4个字节,对双精度值使用8个字节。

来自MySql manual

  

由于浮点值是近似值而未存储为精确值,因此尝试在比较中将它们视为精确值可能会导致问题。

您可以尝试使用decimal代替floatdouble,因为decimal在内部表示为字符串,以保证精确的精确度。