首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clang sqlite3浮点错误

Clang sqlite3浮点错误
EN

Stack Overflow用户
提问于 2014-01-10 10:07:34
回答 1查看 119关注 0票数 0

任何关于如何追踪这个错误的想法都将不胜感激。

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

除了以下几点之外,它都运行得很好。我使用的其中一个结构包含了一个浮点数。这个结构通过队列发送并正确解码,但是当使用sqlite3_bind_double()绑定值时,数据库中的结果值是0。在sqlite3_bind_double()语句周围放置一个printf()语句可以使代码正常工作,并将正确的值放入数据库中。

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

任何帮助都是最好的。提前谢谢。

代码:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2014-01-10 10:27:57

这就是我在尝试将一个4字节的浮点型读取为一个8字节的双精度型时所期望的事情,其他4个字节是...好吧,管他呢。这真的不应该起作用,但是如果你把一个显式的强制转换(double)flt_var作为第三个参数,这会有帮助吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21034990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档