我有一个包含两个字段的域类:minscale
和maxscale
:
class TeamRuleAverageStatic extends TeamRule {
Float minscale;
Float maxscale;
}
*
我使用minscale=0.5
和maxscale=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
类型有什么问题?
答案 0 :(得分:1)
您的问题是由于代表float
和double
值的性质造成的。
两者都用于表示浮点数,其中float
表示单精度,double
表示双精度数。
MySQL对单精度值使用4个字节,对双精度值使用8个字节。
来自MySql manual:
由于浮点值是近似值而未存储为精确值,因此尝试在比较中将它们视为精确值可能会导致问题。
您可以尝试使用decimal
代替float
或double
,因为decimal
在内部表示为字符串,以保证精确的精确度。