Подтвердить что ты не робот

Сохранение статистических данных, мне нужен DECIMAL, FLOAT или DOUBLE?

Я создаю для удовольствия, но я все еще хочу серьезно подойти к нему, сайт, на котором проводятся различные тесты. С этими тестами я надеюсь собрать статистические данные.

Некоторые из данных будут включать процент полноты тестов по мере их времени. Я могу легко вычислить процент тестов, но я бы хотел, чтобы возвращались истинные данные, когда я храню различные значения, относящиеся к тестам при завершении.

Большинство значений в PHP-поплавках, поэтому мой вопрос заключается в том, что если мне нужны истинные статистические данные, я должен хранить их в MYSQL как FLOAT, DOUBLE или DECIMAL.

Я хотел бы использовать функции MYSQL, такие как AVG() и LOG10(), а также TRUNCATE(). Чтобы MYSQL возвращал истинные данные на основе моих значений, которые я вставляю, что я должен использовать в качестве выбора столбца базы данных.

Я спрашиваю, потому что некоторые числа могут или не могут быть плавающими, например, 10, 10.89, 99.09 или просто 0. Но я бы хотел, чтобы возвращались истинные и достоверные статистические данные.

Можно ли полагаться на математику с плавающей запятой?

ИЗМЕНИТЬ

Я знаю, что это общий вопрос, и я приношу свои извинения широко, но для таких же не математиков, как я, я тоже не эксперт по MYSQL, я бы хотел получить мнение эксперта в этой области.

Я сделал свое исследование, но я все еще чувствую, что у меня есть омутное суждение по этому вопросу. Опять прошу прощения, если мой вопрос не соответствует теме или не подходит для этого сайта.

4b9b3361

Ответ 1

Эта ссылка отлично справляется с тем, что вы ищете. Вот что говорит:

Все эти три типа могут быть заданы с помощью следующих параметров (size, d). Где размер - это общий размер строки, а d - точность. Например, для хранения номера типа 1234.567 вы установите тип данных DOUBLE (7, 3), где 7 - общее количество цифр, а 3 - количество цифр, которое следует за десятичной точкой.

FLOAT и DOUBLE, оба представляют числа с плавающей запятой. FLOAT предназначен для одноточечной обработки, а DOUBLE - для чисел с двойной точностью. Точность от 0 до 23 приводит к 4-байтовой колонке FLOAT с одной точностью. Точность от 24 до 53 приводит к 8-байтовой колонке с двойной точностью DOUBLE. FLOAT является точным примерно до 7 знаков после запятой, а DOUBLE - до 14.

Декларация о децималах и функционирование аналогичны Double. Но есть одна большая разница между значениями с плавающей запятой и десятичными (числовыми) значениями. Мы используем тип данных DECIMAL для хранения точных числовых значений, где нам не нужны точность, а точные и точные значения. Десятичный тип может хранить максимум 65 цифр, с 30 цифрами после десятичной точки.

Итак, для наиболее точного и точного значения лучшим вариантом будет Decimal.

Ответ 2

Проще говоря, Float и double не так точны, как десятичные. десятичный знак рекомендуется для ввода количества входящих денег (валюта и зарплата). Еще один момент, который необходимо указать, - это: НЕ сравнивать число с плавающей запятой, используя "=", "< > ", поскольку числа с плавающей точкой не являются точными.

Ответ 3

Если вы не храните десятичные данные (т.е. валюта), вы должны использовать стандартный тип с плавающей точкой (FLOAT или DOUBLE). DECIMAL - тип фиксированной точки, поэтому он может переполняться при вычислении таких вещей, как SUM, и будет нелепо неточным для LOG10.

Нет ничего "менее точного" в отношении двоичных типов с плавающей запятой, на самом деле они будут намного точнее (и быстрее) для ваших нужд. Идите с DOUBLE.

Ответ 4

Linger: веб-сайт, который вы упоминаете и цитируете, имеет IMO некоторую неточную информацию, из-за которой я запутался. В документах я читал, что когда вы объявляете float или double, десятичная точка на самом деле НЕ включена в число. Таким образом, это не количество символов в строке, а все используемые цифры.

Сравните документы: "ДВОЙНАЯ ТОЧНОСТЬ (M, D). Здесь" (M, D) "означает, что значения могут быть сохранены с суммой до M цифр, из которых D цифр могут быть после десятичной точки. Например, определенный столбец поскольку FLOAT (7,4) будет выглядеть как -999.9999 при отображении" http://dev.mysql.com/doc/refman/5.1/en/floating-point-types.html

Также номенклатура в вводящем в заблуждение - в соответствии с документами: M - "точность", а D - "масштаб", тогда как веб-сайт занимает "масштаб" для "точности".

Думал, что это было бы полезно, если бы sb, как я, пытался получить картину. Исправьте меня, если я ошибаюсь, надеюсь, что я не прочитал некоторые устаревшие документы:)

Ответ 5

Десятичный: типы с фиксированной точкой (точное значение). Используйте его, когда вам нужна точная точность, например деньги.

Пример: salary DECIMAL(8,2), 8 - общее количество цифр, 2 - количество знаков после запятой. salary будет находиться в диапазоне от -999999.99 до 999999.99


Float, Double: типы с плавающей точкой (приблизительное значение). Float использует 4 байта для представления значения, Double использует 8 байтов для представления значения.

Пример: percentage FLOAT(5,2), то же, что и тип десятичный, 5 - это суммарные цифры, а 2 - десятичные разряды. percentage будет сохранять значения от -999.99 до 999.99.

Обратите внимание, что это приблизительное значение, в данном случае:

  • Значение типа 1 / 3.0 = 0.3333333... будет храниться как 0.33 (2 десятичное место)
  • Значение типа 33.009 будет сохранено как 33.01 (округление до 2 знаков после запятой)