2011-06-23 102 views
10

在閱讀了關於使用貨幣/貨幣的Java數據類型的幾個問題之後,我決定使用int/long方法,將貨幣/貨幣的值作爲其最低單位(例如美分)進行存儲。我應該使用哪種XML數據類型作爲貨幣/貨幣?

這是否也適用於存儲數據(XML)?

這使我想到的第一件事是否定的,因爲這將只是存儲數據時,當我讀到的數據「解析」爲XML十進制格式,而「解析」回來。

歡迎任何建議,因爲我是新手。

回答

6

我用這個

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

這是一個完整的示例:http://www.java2s.com/Code/XML/XML-Schema/fractionDigitsformoneytype.htm – Cris

+1

我假設你的意思是'fractionDigits'作爲'decimal'的限制,而不是'scale' – Vihung

+1

根據貨幣,您需要0到3個小數位。所以限制是無效的。 – eskatos

9

很難給你上的要求這麼少輸入一個設計,但我永遠不會把錢放在XML相當於沒有貨幣:

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

但是,如果你「美國人民可以重新把你像來自外太空的人,如果你敢建議他們處理多種貨幣,所以您的里程可能會有所不同...

我想不管你考好已經很好地設計了XML:人類讀者能夠正確猜測這意味着什麼,而不會涉及文檔?並非所有人都認同這一要求,有時也不切實際。但省略小數點只是要求數據在該行的某處被錯誤處理。

+0

我同意可讀性的觀點。我今天到的這兩個答案融合得非常好,謝謝你們。 –

1

我已經使用這個

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