MySQL - избегайте усечения конечных нулей в типе данных float - PullRequest
1 голос
/ 19 сентября 2011

У меня есть столбец для хранения данных с плавающей запятой, т.е.

1.1
11.60
4.23

К сожалению, 11.60 сохраняется как 11.6.Мне нужно это, чтобы иметь этот дополнительный ноль.Должен ли я изменить свой тип данных на varchar?Какой лучший способ справиться с этим?

Ответы [ 2 ]

3 голосов
/ 19 сентября 2011

Из комментариев видно, что вы храните код продукта, поэтому float не является хорошим выбором для типа данных, как вы предлагаете. На самом деле это не проблема рендеринга, но мы неправильно истолковали ее из вашего первоначального выбора float (думая, что вы действительно хранили что-то вроде денег или истинного десятичного числа).

Идите с varchar, как вы и предполагали, поскольку это действительно строковое значение.

Вот как вы можете это сделать:

  • создайте новый столбец типа varchar (100) или любой другой длины, подходящей для вас
  • скопировать значения в новый столбец из вашего столбца с плавающей запятой
ALTER TABLE MyTable ADD MyNewColumn VARCHAR(100);

UPDATE MyTable
SET MyNewColumn = FORMAT(MyFloatColumn, 2);
1 голос
/ 19 сентября 2011

Это проблема рендеринга , а не data . Чтобы «решить» это, примените функцию mysql FORMAT к вашему значению при ее выборе:

select FORMAT(my_float_column, 2)
from my_table;

2 - количество десятичных знаков. Он будет обрабатывать (почти) любое количество цифр слева от десятичного разряда.

...