我在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。
答案 0 :(得分:1)
保证double
最多可存储15个十进制有效数字而不会丢失。对于某些值,它会比这更好。
这是一种故意稀疏的数据类型,非常有效地设计用于科学计算:考虑到其内存占用,它具有很大的范围。
如果你可以安排你的查询只对15位重要数据敏感,那么你会没事的。否则,您只能将类型更改为decimal
中的user.table1
。