Мне нужно изменить таблицу с полями типов данных двойной точности, чтобы varchar, изменение было выполнено успешно, однако данные изменились, и я не могу понять, что делает postgres, когда дело доходит до преобразования в обоих направлениях.
Версия Postgres: PostgreSQL 10.4, скомпилированная в Visual C ++ build 1800, 64-битная
ALTER TABLE my_table ALTER COLUMN field_double_precision TYPE varchar;
--After the change this is my problem, new value is very different to old value
id |old_value |new_value |
-------|-----------|-----------------------|
9009 |0.06 | 0.059999999999999998 |
9010 |0.56 | 0.56000000000000005 |
9011 |0.068 | 0.068000000000000005 |
9012 |0.568 | 0.56799999999999995 |
Я понимаю, что значения меняются в приближенном порядке, но я должен избегать этого любой ценой.
Мой тест:
SELECT CAST (0.059999999999999998 AS DOUBLE PRECISION) old_value;
old_value |
----------|
0.06 |
-----------------------------------------------------------------------
SELECT CAST (0.059999999999999998 AS double PRECISION)::VARCHAR new_value;
new_value |
---------------------|
0.059999999999999998 |
Могу ли я сохранить старое и новое значение равными? Что произойдет, когда postgres отформатирует двойную точность в varchar?