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

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

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

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

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

3 ответов


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

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

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

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

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

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


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

<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.