SQLite3 存储 float小数点后4位

周详521 2012-10-19 08:58:45
我想要在SQLite3 中的数据库表存储浮点数需要控制精度为小数点后四位,我每次传入的值为188.2846,但是实际存储到数据表里的是188.284,不知道为什么会把最后一位小数点截断了。 我已经试了float,double两种类型都不行。
我用的是update语句: update tbl set num = 188.2846 where id = 20; 但是我试着用insert语句存储却是可以的。请各位帮忙解决。
...全文
3805 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
异次元的碎片 2015-04-15
  • 打赏
  • 举报
回复
对于sqllite,float和double都有精度限制,具体跟不同版本相关,一般小数精度不超过4位,如果需要自定义小数位数,需使用 DECIMAL(10,5)类型,其中10表示总长度,5表示小数位数
wwwwb 2012-10-22
  • 打赏
  • 举报
回复
你的代码是什么、SQLITE什么版本、表定义是什么
周详521 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
sqlite> insert into x values (1,0);
sqlite> select * from x;
1|0 -- 表里原先的值为0.
sqlite> update x set f=12345.1234;
sqlite> select * from x;
1|12345.1234
[/Quote]

这个办法我试过了,就是我直接写SQL语句执行没有问题。调用sqlite3_exec(pDB, str.c_str(),NULL, NULL, NULL);执行update语句,结果就会被截短。
ACMAIN_CHM 2012-10-19
  • 打赏
  • 举报
回复
sqlite> insert into x values (1,0);
sqlite> select * from x;
1|0 -- 表里原先的值为0.
sqlite> update x set f=12345.1234;
sqlite> select * from x;
1|12345.1234
周详521 2012-10-19
  • 打赏
  • 举报
回复
表里原先的值为0.
string str = "update tbl set num = 188.2846 where id = 20";
sqlite3_exec(pDB, string.c_str(),NULL, NULL, NULL);
ACMAIN_CHM 2012-10-19
  • 打赏
  • 举报
回复
sqlite> insert into x values (1,0);
sqlite> select * from x;
1|0
sqlite> update x set f=12345.1234;
sqlite> select * from x;
1|12345.1234
sqlite>



建议楼主自己先试一下,然后可以把你的测试代码如上一样贴出。否则别人根本无法模拟你的问题。

问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
周详521 2012-10-19
  • 打赏
  • 举报
回复
insert是没有问题的,你试下一开始你的表的数据是0,然后往里update数据,数据有效位超过8个数字,例如123.45678.
周详521 2012-10-19
  • 打赏
  • 举报
回复
补充下,我直接调用sqlite3_exec()执行的SQL语句的。
ACMAIN_CHM 2012-10-19
  • 打赏
  • 举报
回复
sqlite> insert into x values (1,12.1234);
sqlite> select * from x;
1|12.1234
sqlite> update x set f=23.1235;
sqlite> select * from x;
1|23.1235
sqlite>


在SQLITE命令行工具下测试没有你所提到的现象。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧