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

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

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

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

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

Ответ 1

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

<xsd:simpleType name="money">
      <xsd:restriction base="xsd:decimal">
         <xsd:fractionDigits value="2"/>
      </xsd:restriction>
</xsd:simpleType>

Ответ 2

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

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

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

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

Ответ 3

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

<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, чтобы избежать путаницы в глазах пользователя - например, они могут не знать, является ли британский фунт стерлингов GBP или UKP.