Каковы различия между numeric
, float
и decimal
типы данных и которые должны быть использованы в каких ситуациях?
Для любого вида финансовой транзакции (например, для поля зарплаты), какая из них предпочтительнее и почему?
sql
sql-server
types
priyanka.sarkar
источник
источник
Ответы:
Приблизительные числовые типы данных не хранят точные значения, указанные для многих чисел; они хранят чрезвычайно близкое приближение значения. ( Technet )
Избегайте использования плавающих или вещественных столбцов в условиях поиска предложения WHERE, особенно операторов = и <> ( Technet )
как правило, потому что точность, обеспечиваемая десятичной дробью, составляет [10E38 ~ 38 цифр], если ваш номер может в нее поместиться, и меньший объем памяти (и, возможно, скорость) Float не важен, и дело с ненормальным поведением и проблемами приближенных числовых типов не является допустимо, используйте десятичную вообще .
больше полезной информации
основной источник : MCTS Self-Paced Training Kit (экзамен 70-433): Разработка баз данных Microsoft® SQL Server® 2008 - Глава 3 - Таблицы, типы данных и декларативная целостность данных Урок 1 - Выбор типов данных (рекомендации) - Страница 93
источник
use the float or real data types only if the precision provided by decimal is insufficient
- Я думал, что реальный МЕНЬШЕ точнее десятичного, так почему же вы пишете, чтобы использовать реальный, если десятичного числа недостаточно?decimal
все будет в порядке. Это точность 20. Если вам нужно хранить значения между, скажем, 1e20 и 1e-20, ну,decimal
вы не можете этого сделать. Это 40 цифр точности. Вы никогда не сможете хранить 1e20 и 1e-20 в одномdecimal
поле. Вместо этого вы можете использоватьfloat
, который внутренне сохраняет все как журнал базы 2. Это обеспечивает полный диапазон точности в одном поле с недостатком, что только первые ~ 8 цифр будут точными.float
...» - сказал кто? Это цитата или ваше мнение?Рекомендации MSDN: использование десятичных, плавающих и реальных данных
источник
Scale
столбце.numeric
поскольку оно никогда не будет хранить с большей точностью, чем вы просили: см. Stackoverflow.com/a/759606/626804Не полный ответ, а полезная ссылка:
«Я часто делаю вычисления с десятичными значениями. В некоторых случаях приведение десятичных значений к плавающим значениям КАК МОЖНО СКОРЕЕ, перед любыми вычислениями дает лучшую точность»
http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx
источник
decimal
иfloat
могут отличаться . Десятичная дробь максимально защищает от потери, увеличивая точность или масштаб. Однако, как только вы достигнете предела значащих цифр в десятичном выражении, потери значения будут молчать (и точность теряется). Float имеет более широкий диапазон возможных масштабов, и его ограничения на самом деле являются причиной недостаточного масштабирования. Таким образом, поплавок может иметь лучший масштаб. Тем не менее, это все еще неточный тип.Они различаются по приоритету типа данных
Десятичный и числовой значения одинаковы в функциональном отношении, но все еще сохраняется приоритет типов данных , который в некоторых случаях может иметь решающее значение.
Результирующий тип данных является числовым, поскольку он имеет приоритет над типом данных .
Исчерпывающий список типов данных по приоритету:
Ссылка ссылка
источник
Десятичная имеет фиксированную точность, в то время как float имеет переменную точность.
РЕДАКТИРОВАТЬ (не удалось прочитать весь вопрос): Float (53) (он же настоящий) - это число с плавающей запятой двойной точности (32-разрядное) в SQL Server. Regular Float - это число с плавающей запятой одинарной точности. Double - хорошая комбинация точности и простоты для многих вычислений. Вы можете создать число с очень высокой точностью с десятичным числом - до 136-битных - но вы также должны быть осторожны, чтобы правильно определить свою точность и масштаб, чтобы он мог содержать все ваши промежуточные вычисления с необходимым количеством цифр.
источник
Float - это тип данных Приблизительное число, что означает, что не все значения в диапазоне типов данных могут быть представлены точно.
Десятичный / Числовой тип данных с фиксированной точностью, что означает, что все значения в диапазоне типов данных могут быть представлены точно с точностью и масштабом. Вы можете использовать десятичную для экономии денег.
Преобразование из десятичного или числового в плавающее может привести к некоторой потере точности. Для типов данных Десятичный или Числовой SQL Server рассматривает каждую конкретную комбинацию точности и масштаба как отдельный тип данных. DECIMAL (2,2) и DECIMAL (2,4) - это разные типы данных. Это означает, что 11.22 и 11.2222 - это разные типы, хотя в случае с плавающей точкой это не так. Для FLOAT (6) 11.22 и 11.2222 являются одинаковыми типами данных.
Вы также можете использовать тип данных деньги для экономии денег. Это собственный тип данных с точностью до 4 цифр для денег. Большинство экспертов предпочитают этот тип данных для экономии денег.
Ссылка 1 2 3
источник
Дело в десятичной
Какая это основная потребность?
Это связано с тем, что, в конечном счете, компьютеры представляют собой числа в двоичном формате. Это неизбежно приводит к ошибкам округления.
Учти это:
Вышеуказанный многоточие [...] означает «бесконечный». Если вы внимательно посмотрите на это, существует бесконечный повторяющийся паттерн (= '0011')
Итак, в какой-то момент компьютер должен округлить это значение. Это приводит к ошибкам накопления, возникающим из-за многократного использования чисел, которые хранятся неточно.
Скажем, вы хотите хранить финансовые суммы (это числа, которые могут иметь дробную часть). Прежде всего, вы не можете использовать целые числа явно (целые числа не имеют дробной части). С чисто математической точки зрения естественной тенденцией будет использование
float
. Но в компьютере числа с плавающей точкой имеют часть числа, которая находится после десятичной точки - «мантисса» - ограниченная. Это приводит к ошибкам округления.Чтобы преодолеть это, компьютеры предлагают определенные типы данных, которые ограничивают двоичную ошибку округления в компьютерах для десятичных чисел. Это тип данных, который обязательно должен использоваться для представления финансовых сумм. Эти типы данных обычно идут по имени
Decimal
. Так обстоит дело, например, в C #. ИлиDECIMAL
в большинстве баз данных.источник
Хотя этот вопрос не включает тип данных MONEY, некоторые люди, сталкивающиеся с этим потоком, могут испытывать искушение использовать тип данных MONEY для финансовых расчетов.
Будьте осторожны с типом данных MONEY, он имеет ограниченную точность.
В ответах на этот вопрос Stackoverflow много полезной информации об этом:
Следует ли вам выбирать типы данных MONEY или DECIMAL (x, y) в SQL Server?
источник