mysql 将浮点数转换为双精度数

mysql convert float to double

需要更改 table 字段(带数据)的类型。 从 Float 类型到 Double 类型。 执行此操作的代码:

ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value` 
DOUBLE NULL DEFAULT NULL AFTER `id`;

但是我遇到了一个问题: 所有小数变质: 旧值 -> 新值:

129.8 -> 129.8000030517578
117.9 -> 117.9000015258789
99.2 -> 99.19999694824219

如何在不损坏数据的情况下更改字段类型?

试试这个:

ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value` 
DOUBLE(10,2) NULL DEFAULT NULL AFTER `id`;

你不能。 FLOAT 和 DOUBLE 类型表示 approximate 数值数据值。它们的存储方式可以包含各种数字(从非常大到非常小),但代价是有点不准确。 有关详细信息,请参阅 Floating point types

如果您需要这种精度,请改用 Fixed point types,例如 DECIMAL。

试试这个:-

ALTER TABLE `table`
CHANGE COLUMN `my_value` `my_value`
decimal(10,2) NULL DEFAULT NULL AFTER `id`;

为此,我这样做了:

1 个变体: 先转换成VARCHAR(255):

ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value` 
VARCHAR(255) NULL DEFAULT NULL AFTER `id`;

第二次转换为DOUBLE:

ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value` 
DOUBLE NULL DEFAULT NULL AFTER `id`;

2 种变体: 先转换成DOUBLE(10,2):

ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value` 
DOUBLE(10,2) NULL DEFAULT NULL AFTER `id`;

第二次转换为DOUBLE:

ALTER TABLE `my_table`
CHANGE COLUMN `my_value` `my_value` 
DOUBLE NULL DEFAULT NULL AFTER `id`;

会不会有什么问题?