2016-08-16 1 views
0

Я заметил, что многие библиотеки (например, Math.net, NodaTime, порт TALib .NET (библиотека для технического анализа), клиент StackExchange для Redis db) используют Double вместо Decimal. Почему это?
Я знаю, что двойные вычисления быстрее, но есть проблемы с точностью при использовании Double, не так ли?
Более конкретный пример. У меня есть проект, где я работаю с коэффициентами конверсии валют и денег в целом. Исходные данные обычно имеют не более 4 знаков после запятой (например, 54.9320, и для всех вычислений требуется не менее 6 знаков после запятой. В настоящее время я использую десятичную разметку всюду. Неправильно ли я? Должен ли я переключаться на двойной?Почему большинство библиотек .NET используют Double вместо Decimal? И какой из них я должен использовать?

+0

'decimal' обычно для денежных расчетов, а' double' предназначен для научных расчетов. Оба представляют числа с плавающей запятой и, следовательно, оба имеют проблемы с точностью - они просто имеют разные прецизионные характеристики. – Enigmativity

+0

@ Энигматичность, поэтому, если я хочу точности, я должен пойти с десятичной? – chester89

+0

Нет, у обоих есть проблемы с точностью. Если вы делаете денежные расчеты, используйте «decimal». Если вы делаете научные вычисления, используйте «double». – Enigmativity

ответ

0

Обычно десятичное значение используется для всего, что связано с деньгами/цена, потому что точность Двойная составляет всего 16 десятичных цифр, в случае большого количества, он может быть подвержен ошибкам.

System.Single > float - 7 digits 
System.Double > double - 15-16 digits 
System.Decimal > decimal - 28-29 significant digits 

Сейчас подходит к вопросу о том, почему библиотеки использует Double, это может потому что математические операции с плавающей запятой основаны на процессорах, и она использует меньше памяти. В то время как тип decimal является более точным при выпуске число 10 оснований.

+1

Следует отметить две вещи: 1) количество десятичных знаков соответствует * точности *, а не точности, а 2) это не точность и точность, это проблема, это факт, что 'float' /' double' представлены в базе-2 и не подходят для представления чисел базы-10, обычно встречающихся в денежных приложениях. – Groo

+0

Десятичный используется для всего, что связано с деньгами/ценами, а не потому, что это более точно. Даже имея дело с ВВП США, 15 цифр точности - это «цент». Понятно, что экономика, требующая точности «десятичного», должна войти в [Экономика строительства Звезды Смерти] (http://www.shortlist.com/entertainment/films/the-cost-of-the-death-star). Нет, мы используем десятичные числа, потому что делаем десятичные (base10) математические вычисления. – Aron