2013-09-21 3 views
14

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

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

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

+1

Что относительно валют, которые не имеют эквивалента центов? –

+2

Также из-за того, что существуют ситуации, когда транзакции с суб-пенни имеют смысл. – R0MANARMY

+0

И некоторые валюты, у которых [нет базовых 10 субъединиц] (http://en.wikipedia.org/wiki/Non-decimal_currency) – Ben

ответ

0

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

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

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

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

+6

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

+1

Просто потому, что у нас нет центов, у нас есть гроши. В конце дня все валюты являются неотъемлемыми. т. е. монеты, заметки. Как указывалось выше, не используйте числа с плавающей запятой. Люди становятся очень обидчивыми по поводу странного копейки, так как они склонны думать, что если выпустить их из одного пенсов, то что еще выкидывает с вас –

+0

Вот почему проще придерживаться основной валюты (то есть той, в которой курсы обмена данный). – azz

5

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

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

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

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

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

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

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

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

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

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

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

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

Смежные вопросы