На этот вопрос нет простого ответа. Вопрос в том, что вы хотите хранить:
- это окончательная сумма в валюте счета?
- или это может быть сумма строки строки документа (например, сумма строки строки счета-фактуры)?
Конечная сумма в валюте
Я знаю только валюты с двумя десятичными знаками, но к этому документу 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
Money
? - person Oded   schedule 08.05.2012