2011-06-23 9 views
10

Po przeczytaniu kilku pytań na temat tego, jakiego typu danych Java użyć do waluty/pieniędzy, zdecydowałem się użyć metody int/long, w której przechowujesz wartość waluty/pieniądza jako najniższą jednostkę (taką jak centa).Jaki typ danych XML powinienem użyć dla waluty/pieniędzy?

Czy dotyczy to również przechowywania danych (w formacie XML)?

Pierwszą rzeczą, która przychodzi mi do głowy to nie, bo to będzie po prostu „analizowany” w formacie dziesiętnym XML podczas zapisywania danych, a „analizowany” z powrotem, kiedy odczytać danych.

Wszelkie sugestie są mile widziane, ponieważ jestem nowy w tym.

Odpowiedz

6

użyłem tego

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

próbkę kompletnego tutaj: http://www.java2s.com/Code/XML/XML-Schema/fractionDigitsformoneytype.htm – Cris

+1

Zakładam znaczy 'fractionDigits' jako ograniczenie dla' decimal', nie 'scale' – Vihung

+1

W zależności od waluty będziesz potrzebował od 0 do 3 cyfr ułamkowych. Tak więc ograniczenie jest nieważne. – eskatos

9

Trudno dać design z tak małym wejściu w sprawie wymagań, ale nigdy nie umieścić pieniądze wynosi w XML bez waluta:

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

ale jeśli "w USA ludzie mogą traktować cię jak kogoś z kosmosu, jeśli odważysz się sugerować, że obsługują wiele walut, więc twój przebieg może się różnić ...

Myślę, że dobry test tego, czy "Dobrze zaprojektowany XML to: czy ludzki czytelnik odgadnie poprawnie, co to oznacza, nie sięgając po dokumentację? Nie każdy podziela ten pogląd na wymagania, a czasami jest niepraktyczny. Ale pomijanie kropki dziesiętnej to po prostu żądanie, aby dane zostały źle przetworzone gdzieś wzdłuż linii.

+0

Zgadzam się z punktem czytelności. Obie odpowiedzi, które tu dostałem dzisiaj, łączą się bardzo dobrze, dzięki chłopaki. –

1

Użyłem tej

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

To pozwala mi reprezentować moje kwot pieniężnych jako kombinacji trzech znaków (ISO 4217) i kod waluty ilości ograniczonej do dwóch miejsc po przecinku.

Być może warto pójść dalej i zdefiniować kod waluty jako typ wyliczeniowy, który określa wszystkie ważne kody waluty ISO 4217, aby uniknąć jakichkolwiek nieporozumień w oczach użytkownika - na przykład, mogą nie wiedzieć, czy funt brytyjski jest GBP lub UKP.

Powiązane problemy