Doctrine / MySQL,不精确的双倍?

时间:2016-01-31 12:02:56

标签: mysql doctrine-orm floating-point gps

我想保存GPS坐标。它的双格式。保存没问题,

47.60065481725239
18.03011322140128
出现

值,但当我尝试阅读它们时,我得到了

47.600654817252
18.030113221401

略显不精确。

3 个答案:

答案 0 :(得分:1)

您正在看一个浮点数固有不精确的例子,一个好的例子。您可能会发现查找machine epsilon的概念很有帮助。

商用GPS系统本身几乎没有DOUBLE所代表的精度。对于大多数应用程序FLOAT是充足的。但是,如果你知道术语 Datum Universal Transverse Mercator 并且它们对你的应用程序很重要,你可能想要使用DOUBLE

然而,由于DOUBLE epsilon误差导致的GPS位置不准确度大约为十分之一Å单位(百分之一纳米)。你甚至不能让原子保持足够长的时间来精确地测量它们的位置。所以不要担心。

请了解浮点数的工作原理。

答案 1 :(得分:1)

根据需要,浮点数的精度有限:double仅保证存储15 significant digits。然而,在你的情况下,这应该足够了:地球的半径是40,075公里,所以double应该能够将你的位置存储到至少40纳米,这是approximately the size of a virus particle(大概你的输入不准确)。

答案 2 :(得分:0)

我会说你值得探索MySQL中的decimal数据类型:

http://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html

如果您将列数据类型设置为decimal(16,14),那么会在您之前提供2位数字。和之后的14。

请注意,我想知道GPS坐标的精度甚至意味着......