Какое максимальное количество десятичных знаков используется при обменном курсе?

Мне нужно сохранить данные курса обмена валюты в базе данных SQL 2008. Я хотел бы сохранить рейтинг как decimal тип данных в базе данных.

Я не уверен в одном: сколько десятичных знаков указать (например, decimal (18,?)).

Поскольку в качестве источника я буду использовать эту службу: http://openexchangerates.org/latest.json. Кажется, что наибольшее количество десятичных знаков после запятой - 6.

Это правильное число, или могут быть ставки с более чем 6 десятичными знаками?


person mikhail-t    schedule 08.05.2012    source источник
comment
Почему бы не использовать тип данных Money?   -  person Oded    schedule 08.05.2012
comment
В большинстве случаев это даже не так. Обычно вы используете 2 или 3 десятичных знака. Я бы посоветовал остаться с 6 на всякий случай   -  person MilkyWayJoe    schedule 08.05.2012
comment
Сколько десятичных знаков в исходных данных?   -  person Gordon Linoff    schedule 09.05.2012
comment
Я не использовал тип данных Money по этой причине: stackoverflow.com/questions/582797/ Я думаю, я просто использую 6 мест, так как в исходных данных я не нашел ни одного ставка с более чем 6 местами.   -  person mikhail-t    schedule 09.05.2012


Ответы (3)


Однажды я работал над международным финансовым пакетом на основе C #, который должен был поддерживать множество валют, и мы поддерживали 6 знаков после запятой. У нас была пара очень опытных дизайнеров, которые сказали нам, что этого будет достаточно.

person Randy Minder    schedule 08.05.2012
comment
Недостаточно, например, для BitCoin больше нет - person kurochenko; 30.01.2017
comment
6 знаков после запятой недостаточно, например, для Вьетнамского донга: 1USD = 21 831,08 VND, 1 VND = 0,000045806254203USD - person Edgar; 30.12.2017

В настоящее время для поддержки маловероятного обменного курса XBT / VND вам потребуется от 10 до 14 знаков после запятой.

As of 2017-11-20,

1 XBT = 185,416,429.63 VND
1 VND = 0.00000000539327 XBT
person Mike McKenna    schedule 21.11.2017

На этот вопрос нет простого ответа. Вопрос в том, что вы хотите хранить:

  • это окончательная сумма в валюте счета?
  • или это может быть сумма строки строки документа (например, сумма строки строки счета-фактуры)?

Конечная сумма в валюте

Я знаю только валюты с двумя десятичными знаками, но к этому документу Oracle стандарт ISO говорит, что в валюте разрешены 3 десятичных знака. (Мне не удалось найти документ ISO, о котором здесь упоминает Oracle).

Интересно: у SQL Server есть тип данных _ 1_ и smallmoney, который поддерживает 4 десятичных разряда. Не знаю, как они это сделали, возможно, из-за проблем с округлением (см. Ниже).

Сумма строки в строке документа

Возможно, вы захотите убедиться, что у вас нет проблем с округлением, и поэтому используйте более трех десятичных знаков, где у вас есть «частичная сумма» от общей суммы документа (например, счет-фактура).

Пример:

Line Qty Price Discount Line Amount Line Amount rounded 2 decimal places
Item A 5 79.99 3% 387.9515 387.95
Item B 2 56.12 3% 108.8728 108.87
Item C 1 12.19 3% 11.8243 11.82
Total 508.65 508.64

Когда мы округляем сумму строки до двух знаков после запятой, мы получаем разницу в округлении в 1 цент. Вы можете играть в эту игру с другими числами, где вы столкнетесь с различиями с более чем тремя десятичными знаками.

В большинстве систем, с которыми я работал, используются разные подходы:

  • используйте 5 или более десятичных знаков в сумме строки. С 5 десятичными знаками большинство проблем с округлением должно быть решено. Я видел системы ERP с 10 знаками после запятой, но это больше походило на плохой дизайн приложения.
  • 'принудительно' округление суммы строки до максимальной суммы в валюте. десятичные разряды. Это имеет смысл, когда вы хотите распечатать «Сумму строки» в счете-фактуре и не хотите делать распечатанные счета-фактуры, в которых округленная сумма строки не совпадает с общей суммой.
  • сделайте настраиваемым для приложения количество используемых десятичных знаков.
  • добавление «округляющей» строки к документу, чтобы уменьшить округление в случае, если проблемы с округлением приведут к неудовольствию клиента.
  • предупреждать пользователя приложения при возникновении проблем с округлением и спрашивать, как система будет их обрабатывать

Решение проблемы округления в строках документа зависит от дизайна вашего приложения.

person ice1e0    schedule 09.12.2020