Каковы недостатки хранения денежных ценностей как центов/второстепенных единиц?

Я заметил, что некоторые финансовые api как strip api для обработки кредитных карт требуют, чтобы суммы были переданы как центы, это похоже на хорошее упрощение, и это заставляет меня задаться вопросом, почему я не делаю то же самое везде в своем приложении В настоящее время я использую базу данных NUMERIC неограниченной длины с Postgres и BigDecimal в своем Java-коде, но меня искушает простота хранения денег в виде центов.

  • Каковы недостатки хранения денег в виде центов.
  • Существуют ли конкретные операции, которые трудно делать с деньгами в виде центов?
  • Будут ли деньги, хранящиеся как центы, работать со всеми мировыми валютами или делать учет различных валют становится гигантским беспорядком, если еще особые случаи?
  • Есть ли хорошая библиотека java для работы с деньги как центы?

ОБНОВЛЕНИЕ. Для валют, которые не имеют центов, мы можем обобщить вопрос о хранении денег как наименьшей частичной единицы для валюты, так что центы за доллары и любой эквивалент для других валют.

Ответы

Ответ 1

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

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

Фактически, использование наименьшей единицы, скорее всего, упростит выполнение конверсий, так как вы сможете выработать коэффициент конверсии между наименьшей единицей каждой валютной пары. Конечно, как только вы начнете конвертировать, вам снова придется использовать BigDecimal (или тому подобное).

Итак, в целом, может быть лучше всего использовать как наименьшую единицу в качестве вашего наименования, так и использовать BigDecimal для обработки дробных частей, если они могут возникнуть. Не используйте поплавки IEEE, потому что они не могут правильно представлять все десятичные числа. Это приведет к видам ошибок, которые могут кого-то расстроить.

Ответ 2

  • Каковы недостатки хранения денег в виде центов.

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

  1. Существуют ли конкретные операции, которые трудно сделать с деньгами в виде центов?

Вам нужно в конечном итоге представить сумму пользователям. Затем значения должны быть отформатированы в соответствии с форматированием определенной валюты.

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

Работа с реальными валютами и поддержка нескольких валют в приложении может потребовать от вас хранить деньги в 100-м процентах для поддержки валют, таких как CLF с 4 знаками после запятой или BHD с 3 десятичными знаками. См. ISO-4217.

  1. Есть ли хорошая библиотека java для работы с деньгами в качестве центов?

Не то, чтобы я знал. Какую поддержку вы ищете в такой библиотеке?

Ответ 3

Торговля обычно вычисляется долларом (1 австралийский доллар = 0,94 доллара США во время публикации). Тривиально сказать, что 100 австралийских центов = 94 цента США, однако есть много валют, где центов не существует. Основным преимуществом центов является то, что вы можете хранить значения как целые числа, тогда как доллары должны храниться как десятичные значения с плавающей запятой или фиксированной точкой.

Недостатком хранения денежных значений в центах (как целых) является то, что ошибки округления могут возникать. Например, 20 австралийских центов = 18,8 цента США.

Для валют, которые имеют центы, это, вероятно, часто будет просто делать вычисления, но в то же время вам придется конвертировать в доллары (или первичную валюту для валют, не относящихся к доллару), так как это то, что обмен ставки основаны на.

Лично я всегда использую основную валюту над подразделением, с ними легче работать, менее склонны к ошибкам округления и легче читать (150,50 $легче читать, чем 15050 ¢.)