在SQLite中存储双精度值:如何确保精度?
问题描述:
我有一个问题,我需要存储在android homed sqlite数据库中的double值。因为这些double值代表gps值(lat & lng),所以我确实NEED
的绝对精度降到了逗号后面的第9个数字。在SQLite中存储双精度值:如何确保精度?
现在我有像这样的表:
CREATE TABLE x REAL lng;
和插入某物(硬编码)等:
INSERT INTO x lng = '1.0';
并从该表中读取LNG时成一些(JAVA)双变量,我得到像“0.999956837”这样的值 - 这使得这些值对我来说毫无用处。
有没有一种方法来强制我需要的精度,而不是将值存储为“文本”字段(什么会使昂贵的强制转换需要)或将它们存储为整数(这意味着我需要在每次写入/读取时相乘/ -OP)?
答
SQLite是typeless,这意味着所有的表示形式都被写成文本,可能包装器api会做一些你不知道的转换,你会得到这些结果。
如果您需要将数据存储为字符串那就做吧。
正当您读出两次请确保以正确的格式保存时,您可以在列上使用getDouble
。
答
double
大约有17个十进制数字的精度,所以如果9位数是你需要的,应该没有问题(假设你没有对这些值做任何复杂的计算)。只要确保你永远不会使用float
,因为它只有大约7位数的精度。
你还应该确保你了解how binary floating-point works,并且它将总是结果看似“圆”的价值观成为微客 - 它只是因为它在某处happes不要紧对于大多数应用(包括你)只要十七进制数字。看到这个链接也适用于其重要的应用程序的替代品。
只是好奇,它是否表现出相同的行为,如果你使用INSERT INTO x lng = 1.0而不是INSERT INTO x lng ='1.0'',即没有引号? – Joubarc 2010-06-21 13:12:16
yeas - 我使用引号... – xenonite 2010-06-22 06:57:03