Я заметил, что многие библиотеки (например, Math.net, NodaTime, порт TALib .NET (библиотека для технического анализа), клиент StackExchange для Redis db) используют Double вместо Decimal. Почему это?
Я знаю, что двойные вычисления быстрее, но есть проблемы с точностью при использовании Double, не так ли?
Более конкретный пример. У меня есть проект, где я работаю с коэффициентами конверсии валют и денег в целом. Исходные данные обычно имеют не более 4 знаков после запятой (например, 54.9320
, и для всех вычислений требуется не менее 6 знаков после запятой. В настоящее время я использую десятичную разметку всюду. Неправильно ли я? Должен ли я переключаться на двойной?Почему большинство библиотек .NET используют Double вместо Decimal? И какой из них я должен использовать?
ответ
Обычно десятичное значение используется для всего, что связано с деньгами/цена, потому что точность Двойная составляет всего 16 десятичных цифр, в случае большого количества, он может быть подвержен ошибкам.
System.Single > float - 7 digits
System.Double > double - 15-16 digits
System.Decimal > decimal - 28-29 significant digits
Сейчас подходит к вопросу о том, почему библиотеки использует Double
, это может потому что математические операции с плавающей запятой основаны на процессорах, и она использует меньше памяти. В то время как тип decimal
является более точным при выпуске число 10 оснований.
Следует отметить две вещи: 1) количество десятичных знаков соответствует * точности *, а не точности, а 2) это не точность и точность, это проблема, это факт, что 'float' /' double' представлены в базе-2 и не подходят для представления чисел базы-10, обычно встречающихся в денежных приложениях. – Groo
Десятичный используется для всего, что связано с деньгами/ценами, а не потому, что это более точно. Даже имея дело с ВВП США, 15 цифр точности - это «цент». Понятно, что экономика, требующая точности «десятичного», должна войти в [Экономика строительства Звезды Смерти] (http://www.shortlist.com/entertainment/films/the-cost-of-the-death-star). Нет, мы используем десятичные числа, потому что делаем десятичные (base10) математические вычисления. – Aron
'decimal' обычно для денежных расчетов, а' double' предназначен для научных расчетов. Оба представляют числа с плавающей запятой и, следовательно, оба имеют проблемы с точностью - они просто имеют разные прецизионные характеристики. – Enigmativity
@ Энигматичность, поэтому, если я хочу точности, я должен пойти с десятичной? – chester89
Нет, у обоих есть проблемы с точностью. Если вы делаете денежные расчеты, используйте «decimal». Если вы делаете научные вычисления, используйте «double». – Enigmativity