将数据类型decimal更改为float会导致数据丢失吗?

时间:2011-05-15 04:52:45

标签: sql ruby-on-rails ruby-on-rails-3 migration

我需要更改数据库中的几个字段:

:decimal, :precision => 8, :scale => 5

为:

:float

这种结合会导致数据丢失吗?当前数据由0到999之间的整数组成。

如果此迁移会影响已存储的这些数字,我该如何保证此数据安全?

设置:在Heroku上运行的Ruby on Rails 3(解决方案需要适用于PostgreSQL和MySQL)。

2 个答案:

答案 0 :(得分:1)

如果您需要对您的数字进行精确比较或浮点算术,那么它将会发生。打开PostgreSQL并试试这个:

select floor(.8::float * 10.0::float); -- 8
select floor((.1::float + .7::float) * 10.0::float); -- 7

请参阅此相关问题,原因如下:

Why do simple doubles like 1.82 end up being 1.819999999645634565360?

答案 1 :(得分:0)

0到999之间的整数将适合任何一个,数据不会受到影响。如果它只是整数 - 为什么不使用int s?