Разница между числовыми, плавающими и десятичными числами в SQL Server
Я искал в Google, а также посетил decimal и numeric и помощник SQL Server чтобы узнать разницу между числовыми, плавающими и десятичными типами данных, а также выяснить, какой из них следует использовать в какой ситуации.
для любого вида финансовой операции (например, для поля зарплаты), какой из них предпочтительнее и почему?
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 байта) (примерное Числовой Тип Данных)
- будет отображаться на один в .NET
- синоним ISO для реального является float (24)
- float и real (Transact-SQL) - MSDN
- float (8 байт) (примерное Числовой Тип Данных)
- будет отображаться в два раза в .NET
- все точно числовые типы всегда дают один и тот же результат, независимо от вида архитектуры процессора используется или величины
- параметр, поставляемый в тип данных float, определяет количество битов, которые используется для хранения мантисса плавающей точкой номер.
- приблизительный числовой тип данных обычно использует меньше памяти и имеет лучшую скорость (до 20x), и вы также должны учитывать, когда они были преобразованы в .NET
основной источник: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, особенно = и операторы. лучше всего ограничить плавающие и реальные столбцы до > или
не полный ответ, но полезная ссылка:
" Я часто делаю вычисления против десятичных значений. В некоторых случаях приведение десятичных значений к плаванию как можно скорее, до любых вычислений, дает лучшую точность. "
они отличаются по приоритету типа данных
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-значной точностью для денег. Большинство экспертов предпочитает этот тип данных для сохранения деньги.


Comments