десятичный против двойного! - Какой я должен использовать и когда? [Дубликат]

Неправильно ли, что, когда GHC в 6.12 использует эти новые функции по умолчанию, они также будут реализовывать [x..y] и перечислять ошибки в этом нерекурсивном режиме? Потому что единственная причина, по которой они не являются правильной строкой, состоит в том, что они internal и не написаны на самом деле в Haskell, но больше похожи на ключевые слова для скорости и / или потому, что вы не сможете переопределить этот синтаксис.

831
задан HerbalMart 14 March 2014 в 13:18
поделиться

6 ответов

Для денег всегда десятичное число. Вот почему он был создан.

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

Если точное значение чисел не важно, используйте удвоение для скорости. Это включает графические, физические или другие вычисления в области физических наук, где уже есть «количество значащих цифр».

1001
ответ дан 22 November 2019 в 21:11
поделиться

У меня вопрос, когда следует использовать двойной и когда я должен использовать десятичный введите?

decimal для случаев, когда вы работаете со значениями в диапазоне 10 ^ (+/- 28) и когда у вас есть ожидания относительно поведения, основанного на представлениях по основанию 10 - в основном деньги.

double ] для случаев, когда вам нужна относительная точность (т. е. потеря точности конечных цифр при больших значениях не является проблемой) в совершенно разных величинах - double покрывает более 10 ^ (+/- 300). Лучший пример здесь - научные расчеты.

какой тип подходит для денег? вычисления?

десятичное, десятичное , десятичное

Не принимать никаких замен.

Наиболее важным фактором является то, что double , реализуемое как двоичная дробь, не может точно представить многие десятичные дроби (например, 0,1) вообще , и его общее количество цифр меньше, поскольку оно имеет ширину 64 бита по сравнению со 128-битным для десятичного . Наконец, финансовые приложения часто должны придерживаться определенных режимов округления (иногда требуемых законом). decimal поддерживает эти ; double нет.

173
ответ дан 22 November 2019 в 21:11
поделиться

Десятичное число для точных значений. Double - для приблизительных значений.

USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)
35
ответ дан 22 November 2019 в 21:11
поделиться

Для денег: десятичное . Он требует немного больше памяти, но не имеет проблем с округлением, как иногда бывает у double .

27
ответ дан 22 November 2019 в 21:11
поделиться

Определенно используйте целые типы для ваших денежных вычислений. Это невозможно переоценить, так как на первый взгляд может показаться, что тип с плавающей запятой подходит.

Вот пример кода на Python:

>>> amount = float(100.00) # one hundred dollars
>>> print amount
100.0
>>> new_amount = amount + 1
>>> print new_amount
101.0
>>> print new_amount - amount
>>> 1.0

выглядит вполне нормально.

Теперь попробуйте еще раз с 10 ^ 20 зимбабвийских долларов

>>> amount = float(1e20)
>>> print amount
1e+20
>>> new_amount = amount + 1
>>> print new_amount
1e+20
>>> print new_amount-amount
0.0

Как видите, доллар исчез.

Если вы используете целочисленный тип, он работает нормально:

>>> amount = int(1e20)
>>> print amount
100000000000000000000
>>> new_amount = amount + 1
>>> print new_amount
100000000000000000001
>>> print new_amount - amount
1
10
ответ дан 22 November 2019 в 21:11
поделиться

System.single / float - 7 цифр
System.Double / double - 15-16 цифр
System. Десятичная / - десятичная - 28-29 значащих цифр

Способ, которым меня ужалили при использовании неправильного типа (несколько лет назад) - большие суммы:

  • £520,532.52 - 8 цифр
  • £1,323,523.12 - 9 цифр

У вас заканчивается 1 миллион за флот.

15-значная денежная стоимость:

  • £1,234,567,890,123.45

9 триллионов с двойной. Но с делением и сравнением все сложнее (я точно не эксперт по числам с плавающей точкой и иррациональным числам - см. точку Марка). Смешивание десятичных и двойных чисел вызывает проблемы:

Математическая операция или операция сравнения который использует число с плавающей точкой может не дать того же результата, если десятичное число используется потому, что число с плавающей запятой может не точно приближаться к десятичной дроби номер.

Когда мне следует использовать двойное вместо десятичного числа? имеет несколько похожих и более глубоких ответов.

Использование double вместо decimal для монетарных приложений является микро-оптимизацией - это самый простой способ, на который я смотрю.

38
ответ дан 22 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: