Хранить число с плавающей запятой как INT?

0

Каким будет лучший тип данных для хранения числа с плавающей запятой в mySQL?

Можно ли как-то сохранить его как INT?

Я думаю, что VARCHAR - мой лучший вариант, но если вы, ребята, знаете что-нибудь лучше, я был бы признателен за вход.

Thanx заранее!

  • 7
    что не так с типами mysql FLOAT, REAL и DOUBLE_PRECISION?
  • 0
    В этом нет ничего плохого, просто я о них не знал, я в первую очередь разработчик, а не бэкэнд, но я даю ему шанс, отсюда и все глупые вопросы, спасибо, что подарили мне! :)
Показать ещё 2 комментария
Теги:

4 ответа

5
Лучший ответ

Я бы использовал тип Mysql Float.

  • 0
    Спасибо за помощь!
6

В зависимости от того, какой тип числа с плавающей запятой вы храните, все сведения о числовых типах MySQL можно найти здесь:

http://dev.mysql.com/doc/refman/5.5/en/numeric-types.html

DECIMAL: Для валюты вы должны использовать Decimal, потому что ее точность и вы не получите странное десятичное округление в арифметике.

INT: Да, вы можете хранить float как int для повышения производительности. Например, валюта может храниться как $19,56 или 1956, если вы всегда /100 при отображении, бухгалтерское программное обеспечение делает это часто. Кроме того, вы можете хранить широту/долготу как целые числа, 322274063, -1109654800 = 32.2274063, -110.9654800, если вы делите на 10 000 000, если вне базы данных.

FLOAT/DOUBLE: И тогда, конечно, есть длинный и двойной. Используйте их, когда производительность не является приоритетом или количество десятичных знаков меняется.

SO ПРАВИЛО: Если производительность является проблемой, и вы знаете, что десятичные разряды всегда фиксированной длины, вы можете легко хранить INT для хранения FLOAT.

1

Почему вы хотите сохранить с плавающей точкой как int? MySQL имеет десятичные и плавающие типы, как и ваш язык программирования.

Я предполагаю, что у вас есть веская причина. Чтобы сохранить float как int, вы можете попробовать несколько вещей:

  • Умножьте число на 10 ^ n, где n - количество значащих цифр, которые вы хотите сохранить, а затем усечь остальную часть дробной части. Когда вы получите его обратно из БД, конвертируйте его в float/decimal и разделите на n. Для этого требуется int int достаточно большой, чтобы хранить умноженное значение; в 32-битной архитектуре "native" int может хранить значения до 2 миллиардов.
  • Разделите число на свою целую часть и ее дробную часть. Для этого требуется два поля, но каждое поле может иметь значение до максимального целочисленного значения, что позволяет легко получить точность в стомиллионных версиях.
0

Если вам нужно закодировать число с плавающей запятой в плоском формате, я бы рекомендовал взглянуть на http://en.wikipedia.org/wiki/IEEE_754-2008

Ещё вопросы

Сообщество Overcoder
Наверх
Меню