Разница между числовым, float и decimal в SQL Server
Я искал в Google, а также посетил decimal и numeric и помощник SQL Server чтобы определить разницу между числовыми, плавающими и десятичными типами данных, а также выяснить, какой из них следует использовать в какой ситуации.
для любого вида финансовой операции (например, для поля зарплаты), какой из них предпочтительнее и почему?
6 ответов
использовать float или реальные типы данных только если точность, предусмотренных decimal (до 38 цифр) недостаточно
приблизительные числовые типы данных не хранят точные значения, указанные много цифры; они хранят очень близко приблизительное значение.(в TechNet)
избегайте использования float или реальные столбцы в условиях поиска предложения WHERE, особенно операторы = и (в TechNet)
так вообще-за точность, обеспечиваемая decimal является [10e38 ~ 38 цифр], если ваш номер может поместиться в нем, и меньшее пространство для хранения (и, возможно, скорость) Float не имеет значения, и дело с аномальным поведением и проблемами приблизительных числовых типов неприемлемо,использовать Decimal вообще.
больше полезной информации
- numeric = decimal (от 5 до 17 байт) (точно Числовой Тип Данных)
- будет сопоставляться с Decimal в .NET
- оба имеют (18, 0) по умолчанию (точность,масштаб) параметры в SQL server
- масштаб = максимальное количество десятичных цифр, которые могут быть сохранены справа от десятичной точки.
- обратите внимание, что деньги (8 байт) и smallmoney (4 байта) являются также точный и сопоставить с десятичной в .NET и имеют 4 десятичные точки(MSDN)
- decimal и numeric (Transact-SQL) - MSDN
- real (4 байта) (примерное Числовой Тип Данных)
- будут карту в один .Сети
- синонимом ISO для real является float (24)
- float и real (Transact-SQL) - MSDN
- плавающей точкой (8 байт) (примерное Числовой Тип Данных)
- будет сопоставляться с двойным в .NET
- все точно числовые типы всегда дают один и тот же результат, независимо от того, какой тип архитектура процессора используется или величины
- параметр, поставляемый в тип данных float, определяет количество битов, которые используется для хранения мантисса плавающей точкой номер.
- приблизительный числовой тип данных обычно использует меньше памяти и имеет лучшую скорость (до 20x), и вы также должны учитывать, когда они были преобразованы в .NET
основной источник : MCTS Self-Paced Training Kit (Exam 70-433): разработка баз данных Microsoft® SQL Server® 2008 - Глава 3-таблицы, типы данных и декларативная целостность данных Урок 1-выбор типов данных (рекомендации) - страница 93
рекомендации от MSDN: используя decimal, float и реальные данные
максимальная точность числовых и десятичных типов данных по умолчанию-38. В Transact-SQL numeric функционально эквивалентен decimal тип данных. используйте десятичный тип данных для хранения чисел с десятичными знаками когда значения данных должны храниться точно так, как указано.
поведение float и real следует за Спецификации IEEE 754 приблизительные числовые типы данных. Из-за приблизительного характера float и реальных типов данных не используйте эти типы данных, когда они точны числовое поведение требуется, например, в финансовых приложениях, в операции, связанные с округлением или проверкой равенства. Вместо этого, используйте типы данных integer, decimal, money или smallmoney. Избегайте использования поплавка или реальные столбцы в условиях поиска предложения WHERE, особенно = и операторы. лучше всего ограничить float и реальные столбцы > или
не полный ответ, но полезная ссылка:
" Я часто делаю вычисления против десятичных значений. В некоторых случаях литье десятичных значений для float ASAP до любых вычислений дает лучшую точность. "
они отличаются приоритетом типа данных
Decimal и цифровой такие же функциональные но есть еще тип данных приоритет, который может иметь решающее значение в некоторых случаях.
SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')
полученный тип данных цифровой потому что он принимает тип данных приоритет.
исчерпывающий список типов данных по предшествованию:
Decimal имеет фиксированную точность, в то время как float имеет переменную точность.
EDIT (не удалось прочитать весь вопрос): Float (53) (он же real)-это число с плавающей запятой двойной точности (32-разрядное) в SQL Server. Regular Float-это число с плавающей запятой с одной точностью. Double-это хорошее сочетание точности и простоты для многих вычислений. Вы можете создать очень точное число с десятичной запятой - до 136-бит - но вы также должны быть осторожны, чтобы определить свой точность и масштабирование правильно, чтобы он мог содержать все ваши промежуточные вычисления до необходимого количества цифр.
Float - приблизительный тип данных, что означает, что не все значения в диапазоне типов данных могут быть представлены точно.
Decimal / Numeric - тип данных фиксированной точности, что означает, что все значения в диапазоне типов данных могут быть представлены точно с точностью и масштабом. Вы можете использовать decimal для экономии денег.
преобразование из десятичного или числового в float может привести к некоторой потере точности. Для decimal или numeric типы данных SQL Server рассматривает каждую конкретную комбинацию точности и масштаба как разные типы данных. DECIMAL(2,2) и DECIMAL (2,4) - это разные типы данных. Это означает, что 11.22 и 11.2222 являются разными типами, хотя это не относится к float. Для FLOAT (6) 11.22 и 11.2222 являются одинаковыми типами данных.
вы также можете использовать деньги тип данных для хранения денежных средств. Это-родной тип данных с 4-значной точностью для денег. Большинство экспертов предпочитают этот тип данных для сохранения деньги.