Real到Float转换,不会丢失数据

时间:2017-05-23 17:46:16

标签: sql-server

我有一个表,其中有两列用于存储的坐标。这些列是REAL数据类型,我注意到从我的应用程序中它只显示5位小数的坐标,并且位置不够准确。 我决定将数据类型更改为FLOAT,因此我可以使用更多的小数。令我惊喜的是,当我更改列数据类型时,突然出现小数,而不必再次存储所有坐标。

任何人都可以告诉我为什么会这样? REAL数据类型的小数精度会发生什么?插入时数据是否舍入并截断?为什么当我更改数据类型时,精度不会丢失数据?...

1 个答案:

答案 0 :(得分:1)

您想使用Decimal数据类型。

浮点值由值和exponenent计算。这允许您在少量内存中存储大量数字表示。这也意味着你并不总能得到你正在寻找的数字,而且非常接近。这就是为什么在比较浮点值时,可以在一定容差范围内对它们进行比较。

  

令我惊喜的是,当我更改列数据类型时,突然出现小数,而不必再次存储所有坐标。

请注意,这并不意味着填写的值是您正在寻找的准确值。如果您截断原始计算,则需要再次获取这些数字而不会削减任何精度。当您从Real转换为Float时自动填充的值不是您截断的其余部分,它们是全新的值,这是因为为用于填充Real值的计算添加更多精度。 / p>

这是一个很好的线程,它解释了SQL中数据类型的不同之处:

另一个有用的链接: