Разница между числовыми, плавающими и десятичными числами в SQL Server



Я искал в Google, а также посетил decimal и numeric и помощник SQL Server чтобы узнать разницу между числовыми, плавающими и десятичными типами данных, а также выяснить, какой из них следует использовать в какой ситуации.



для любого вида финансовой операции (например, для поля зарплаты), какой из них предпочтительнее и почему?

1417   6  

6 ответов:

использовать float или real типы данных только если точность, предусмотренных decimal (до 38 цифр) недостаточно

  • приблизительные числовые типы данных не хранят точные значения, указанные много цифры; они хранят очень близко приблизительное значение.(Technet)

  • избегайте использования плавающие или вещественные столбцы в условиях поиска предложений WHERE, особенно операторы = и (Technet)

так вообще-за точность обеспечивается десятичных это [10E38 ~ 38 цифр], если ваш номер может поместиться в нем, и меньшее пространство для хранения (и, возможно, скорость) Float не важно, и дело с аномальным поведением и проблемами приблизительных числовых типов не приемлемо,использовать десятичное вообще.

больше полезной информации

  • numeric = decimal (от 5 до 17 байт) (точно Числовой Тип Данных)
    • будет сопоставляться с десятичной в .NET
    • оба имеют (18, 0) в качестве параметров по умолчанию (точность,масштаб) в SQL server
    • масштаб = максимальное количество десятичных цифр, которые могут быть сохранены справа от десятичной точки.
    • пожалуйста, обратите внимание, что деньги(8 байт) и smallmoney(4 байта) являются также точное и сопоставление с десятичным числом в .NET и имеет 4 десятичные точки( MSDN)
    • decimal and numeric (Transact-SQL) - MSDN
  • real (4 байта) (примерное Числовой Тип Данных)
  • float (8 байт) (примерное Числовой Тип Данных)
    • будет отображаться в два раза в .NET
  • все точно числовые типы всегда дают один и тот же результат, независимо от вида архитектуры процессора используется или величины
  • параметр, поставляемый в тип данных float, определяет количество битов, которые используется для хранения мантисса плавающей точкой номер.
  • приблизительный числовой тип данных обычно использует меньше памяти и имеет лучшую скорость (до 20x), и вы также должны учитывать, когда они были преобразованы в .NET

Exact Numeric Data TypesApproximate Numeric Data Types

основной источник:MCTS Self-Paced Training Kit (экзамен 70-433): разработка баз данных Microsoft® SQL Server® 2008 - Глава 3-таблицы, типы данных и декларативная целостность данных Урок 1-выбор типов данных ( рекомендации) - страница 93

рекомендации от MSDN: использование десятичных, плавающих и реальных данных

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

поведение поплавка и реального следует Спецификации IEEE 754 приблизительные числовые типы данных. Из-за приблизительной природы float и реальных типов данных не используйте эти типы данных, когда они точны числовое поведение требуется, например, в финансовых приложениях, в операции, связанные с округлением или проверкой равенства. Вместо этого, используйте типы данных integer, decimal, money или smallmoney. Избегайте использования поплавка или реальные столбцы в условиях поиска предложений WHERE, особенно = и операторы. лучше всего ограничить плавающие и реальные столбцы до > или

не полный ответ, но полезная ссылка:

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

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx

они отличаются по приоритету типа данных

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

SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')

результирующий тип данных цифровой потому что он принимает тип данных приоритет.

исчерпывающий список типов данных по предшествованию:

ссылка ссылка

Decimal имеет фиксированную точность, в то время как float имеет переменную точность.

редактировать (не удалось прочитать весь вопрос): Float (53) (aka real)-это число с плавающей запятой двойной точности (32-разрядное) в SQL Server. Обычный поплавок-это число с плавающей запятой с одной точностью. Double-это хорошее сочетание точности и простоты для многих вычислений. Вы можете создать очень точное число с десятичной дробью - до 136 бит - но вы также должны быть осторожны, что вы определяете свой точность и масштаб правильно, так что он может содержать все промежуточные расчеты необходимого количества цифр.

Float является приблизительным типом данных, что означает, что не все значения в диапазоне типов данных могут быть представлены точно.

Decimal / Numeric является типом данных с фиксированной точностью, что означает, что все значения в диапазоне типов данных могут быть представлены точно с точностью и масштабом. Вы можете использовать decimal для экономии денег.

преобразование из десятичного или числового в плавающее может привести к некоторой потере точности. Для decimal или numeric типы данных SQL Server рассматривает каждое конкретное сочетание точности и масштаба как отдельный тип данных. Десятичные(2,2) и десятичные (2,4) - это разные типы данных. Это означает, что 11.22 и 11.2222 являются разными типами, хотя это не относится к float. Для FLOAT (6) 11.22 и 11.2222 являются одинаковыми типами данных.

вы также можете использовать деньги тип данных для хранения денежных средств. Это-родной тип данных с 4-значной точностью для денег. Большинство экспертов предпочитает этот тип данных для сохранения деньги.

ссылка 1 2 3

Comments

    Ничего не найдено.