2014-01-10 126 views
0

任何想法如何追查这个错误,将不胜感激。铿锵sqlite3浮动错误

我有一些在两个或多个进程中运行的c代码。第一个进程侦听消息队列并将结果结构保存到数据库中。其余进程查询一个或多个串行设备,并通过消息队列将此信息传递给第一个进程以存储在数据库中。

这一切都很好,除了以下内容。我正在使用的其中一个结构包含一个浮点数。此结构通过队列发送并正确解码,但使用sqlite3_bind_double()绑定值时,数据库中的结果值为0.围绕sqlite3_bind_double()语句放置printf()语句会导致代码工作并放置正确的值在数据库中。

但更有意思的是,如果我删除printf()语句并使用gcc编译程序,代码工作。

任何帮助将是伟大的。提前致谢。

代码:

int 
add_inverter_stat(sqlite3 *db_conn, struct inverter_stat const *istat 
       ,int *sqlite3_err) 
{ 

     sqlite3_stmt *stmt = NULL; 
     *sqlite3_err = sqlite3_prepare_v2(db_conn, SQL_INSERT_INVERTER_STAT, -1 
             ,&stmt, NULL); 

     *sqlite3_err = sqlite3_bind_int(stmt, 1, istat->stat_id); 
     *sqlite3_err = sqlite3_bind_text(stmt, 2, istat->serial_no, -1, NULL); 
     *sqlite3_err = sqlite3_bind_int64(stmt, 3, istat->time_taken); 
     *sqlite3_err = sqlite3_bind_double(stmt, 4, (double)istat->value); 

     *sqlite3_err = sqlite3_step(stmt); 

     sqlite3_finalize(stmt); 
     return 1; 
} 
+0

请显示'sqlite3_bind_double'周围的确切代码。 –

回答

0

这是诸如此类的事情,我希望从一些试图读取一个四字节浮点作为八字节双,与其他四个字节是......嗯,不管。这真的不应该,但如果你把第三个参数明确地转换成(double)flt_var,这有帮助吗?