|
|
1
3
实际上,进一步的测试揭示了以下奇怪的结果:当DB驱动程序将数据绑定到查询语句时,精度会丢失,并且 之前 数据实际上被插入到DB中。 这有以下有趣的结果:即使我将关键字绑定到后续的搜索查询,精度似乎也会以相同的方式丢失,因此几乎“意外”地返回了正确的结果。也就是说,键(坐标)存储不正确,随后的选择也不正确地转换查询键,但以匹配的方式转换,因此找到了记录。考虑到由于精度损失而导致的转换总是在同一平台(服务器)上执行,保持原样可能是安全的??或者可能不是,也许未来的迁移操作(即,由于缩放)会使舍入误差变得明显。 Yawar的指针让我看到了MySQL的手册,其中解释了浮点数字可以存储为DECIMAL,而不会丢失精度: 精确值数字文本有整数部分或小数部分,或两者兼而有之。它们可能是有符号的 http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html
假设现有的解决方案似乎有效,那么问题就变成了,保留DB数据类型更好吗
存储:
这意味着我们需要:
相反,类型为的列
速度(算术):
速度(搜索):
结论:
|
|
2
0
与其将纬度和经度存储为双倍,不如乘以1000000,转换为整数并存储。当然,如果你需要在你的应用程序中读回来,可以除以100000.0。 这将为您提供足够的占位符精度(0.000001),并将消除浮点转换和精度问题,并且占用的空间略小。我在自己的数据中使用这个(它是二进制的,而不是SQL),并称之为MicroDegrees。 |
|
|
Justin · 如何在Java中以全精度格式化double? 8 年前 |
|
|
Pernoctador · 两个给定数字之间的双精度密度 8 年前 |
|
|
INs · MySQL保存浮点错误 8 年前 |
|
|
Philip.W · 在C中格式化类似xxxxE+xx的双精度 8 年前 |