mysql将float转换为double

时间:2015-05-04 07:41:55

标签: mysql double alter-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

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

4 个答案:

答案 0 :(得分:3)

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

如果您需要此准确度,请转而使用DECIMAL等Fixed point types

答案 1 :(得分:1)

为实现这一目标,我已经这样做了:

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`;

会有任何问题吗?

答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

试试这个: -

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