问题背景:
在数据库中设置了一段float类型的数值字段,当我在Qt中使用语句查找时,float类型数值未获取到,并且导致了后面的数值字段也未获取到。
//前面查询语句省略
……
while(query->next())
{
float fGrow=query->value(0).toFloat();
int nNum=query->value(1).toInt();
QString str=query->value(2).toString();
}
当获取浮点型数值时,fGrow的值会获取不到,导致后面的数值都会获取失败。
解决方法:
将数据库中的数据类型从float类型改为decimal(18,1) //括号内参数分别为长度和小数点位数,然后代码改为以下:
while(query->next())
{
double fGrow=query->value(0).toDouble();
int nNum=query->value(1).toInt();
QString str=query->value(2).toString();
}
这样就完美解决了。
总结:
数据库中的float和real类型都是不能精确存储数值,且在Qt获取可能会存在数值精确错误和以上获取不到的错误,因此我们应当避免使用这两个,改用decimal(numeric)。