Использование типов данных decimal, float и real

Тип данных decimal может хранить не более 38 разрядов, все из которых могут быть справа от десятичного разделителя. Тип данных decimal хранит точное представление числа. Нет понятия приближенности для хранимого значения.

Два атрибута, которые определяют столбцы, переменные и параметры decimal:

  • p

    Определяет точность или количество разрядов, которое может хранить объект.

  • s

    Определяет масштаб или количество разрядов, которое может быть расположено справа от десятичного разделителя.

    p и s должны соответствовать правилу: 0 <= s <= p <= 38.

По умолчанию максимальная точность типов данных numeric и decimal составляет 38 разрядов. В Transact-SQL тип данных numeric функционально эквивалентен типу данных decimal.

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

Дополнительные сведения о влиянии математических операций на точность и масштаб результата см. в разделе Точность, масштаб и длина (Transact-SQL).

Использование типов данных float и real

Типы данных float и real называются приблизительными типами данных. Поведение float и real соответствует спецификации IEEE 754 для приблизительных числовых типов данных.

Приблизительные числовые типы данных не хранят точных значений, заданных для многих чисел. Вместо этого они хранят очень хорошее приближение для этих значений. Для многих приложений различие между заданным значением и хранимым приближением несущественно. Однако в некоторых случаях это различие становится ощутимым. По причине приблизительной природы типов данных float и real не используйте их, если требуется точность хранения значений. Например, в финансовых приложениях, в операциях, связанных с округлением, или в проверках на точное равенство. Вместо этого используйте целые типы данных, decimal, money или smallmoney.

Избегайте использования столбцов типов float и real в предложении WHERE, особенно при использовании логических операторов = и <>. Рекомендуется ограничить использование столбцов float и real операциями сравнения > или <.

Спецификация IEEE 754 обеспечивает четыре режима округления: округление к ближайшему, округление вверх, округление вниз и округление к нулю. Microsoft SQL Server использует округление вверх. Все эти режимы гарантируют точность представления, но дают слегка отличающиеся результаты для значений с плавающей точкой. Так как двоичное представление числа с плавающей точкой может использовать множество допустимых схем округления, то это приводит к невозможности точного задания значения с плавающей точкой.