Какой тип данных XML я должен использовать для валюты / денег? - PullRequest
11 голосов
/ 23 июня 2011

Прочитав несколько вопросов о том, какой тип данных Java использовать для валюты / денег, я решил использовать метод int / long, где вы сохраняете значение валюты / денег в качестве наименьшей единицы (например, центов). .

Это относится и к хранению данных (в XML)?

Первое, что приходит мне в голову, - нет, потому что оно будет просто "проанализировано" в десятичном формате XML при сохранении данных и снова "проанализировано" обратно при чтении данных.

Любые предложения приветствуются, так как я новичок в этом.

Ответы [ 3 ]

9 голосов
/ 23 июня 2011

Трудно дать вам дизайн с таким небольшим вкладом в требования, но я бы никогда не поместил денежные суммы в XML без валюты:

<amount currency="GBP">230.45</amount>

Но если вы в США, люди могут относиться к вамкак кто-то из космоса, если вы осмелитесь предположить, что он работает с несколькими валютами, поэтому ваш пробег может отличаться ...

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

7 голосов
/ 23 июня 2011

я использовал это

<xsd:simpleType name="money">
      <xsd:restriction base="xsd:decimal">
         <xsd:fractionDigits value="2"/>
      </xsd:restriction>
</xsd:simpleType>
1 голос
/ 16 мая 2013

Я использовал это

<complexType name="PaymentAmountType">
  <annotation><documentation>Type representing a payment amount (e.g. price or total)</documentation></annotation>
  <attribute name="currencyCode" type="payment:CurrencyCodeType" use="required"/>
  <attribute name="amount" type="payment:AmountType" use="required"/>
</complexType>

<simpleType name="AmountType">
  <restriction base="decimal">
    <fractionDigits value="2"/>
  </restriction>
</simpleType>

<simpleType name="CurrencyCodeType">
  <restriction base="string">
    <minLength value="3"/>
    <maxLength value="3"/>
    <pattern value="[A-Z]{3}"/>
  </restriction>
</simpleType>

Это позволяет мне представлять мои денежные суммы в виде комбинации трехзначного (ISO 4217) кода валюты и суммы, ограниченной двумя десятичными разрядами.

Возможно, вы могли бы пойти дальше и определить код валюты как перечислимый тип, который определяет все действительные коды валюты ISO 4217, чтобы избежать путаницы в глазах пользователя - например, они могут не знать, является ли британский фунт стерлингов фунтом стерлингов илиУКП.

...