MySQL:从dobule转换为十进制时精度损失

时间:2017-11-22 15:36:19

标签: mysql sql double decimal rounding

我在MySQL中有一个包含两个double列的表。 当我执行查询时:

select 
    col_1,
    col_2
from user.table1

我得到以下结果:

col_1                   col_2
28323.690288713915000   3.877725752582878

但是,当我尝试将列转换为十进制时:

select 
    cast(col_1 as decimal(30,15)) as col_1,
    cast(col_2 as decimal(30,15)) as col_2
from user.table1

MySQL返回以下内容:

col_1                   col_2
28323.690288713920000   3.877725752582878

如您所见,左侧col_1在末尾略微圆整,而col_2保持不变。我也试过CONVERT()函数,但它给了我相同的结果。

由于我正在处理项目的要求,我需要将double列转换为decimal而不会丢失精确度。

为什么会发生这种情况,有什么方法可以阻止这种舍入?

MySQL版本:5.1.72-community。

1 个答案:

答案 0 :(得分:1)

保证double最多可存储15个十进制有效数字而不会丢失。对于某些值,它会比这更好。

这是一种故意稀疏的数据类型,非常有效地设计用于科学计算:考虑到其内存占用,它具有很大的范围。

如果你可以安排你的查询只对15位重要数据敏感,那么你会没事的。否则,您只能将类型更改为decimal中的user.table1