Ответ 1
я использовал этот
<xsd:simpleType name="money">
<xsd:restriction base="xsd:decimal">
<xsd:fractionDigits value="2"/>
</xsd:restriction>
</xsd:simpleType>
После прочтения нескольких вопросов о том, какой тип данных Java использовать для валюты/денег, я решил использовать метод int/long, где вы храните стоимость валюты/денег как свою самую низкую единицу (например, центы).
Это относится также к хранению данных (в XML)?
Первое, что приходит мне на ум, - нет, потому что он будет просто "разбираться" в формате XML десятичного формата при хранении данных и "разбираться" снова, когда я прочитаю данные.
Любые предложения приветствуются, поскольку я новичок в этом.
я использовал этот
<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: будет ли пользователь-читатель правильно догадываться, что это означает, не достигнув документации? Не все разделяют это мнение о требованиях, и это иногда непрактично. Но опускание десятичной точки - это просто запрос на неправильную обработку данных где-то вдоль линии.
Я использовал этот
<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.