我应该使用哪种XML数据类型用于货币/货币?

时间:2011-06-23 12:49:37

标签: java xml currency data-storage

在阅读了几个关于用于货币/货币的Java数据类型的问题之后,我决定使用int / long方法,将货币/货币的价值存储为最低单位(例如美分)

这是否也适用于存储数据(使用XML格式)?

我想到的第一件事是,因为它在存储数据时只会被“解析”为 XML十进制格式,而在我读取数据时会再次“解析”回来

欢迎任何建议,因为我是新手。

3 个答案:

答案 0 :(得分:9)

很难给你一个设计,对要求的投入很少,但如果没有货币,我绝不会把钱存入XML:

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

但如果你在美国,如果你敢于建议他们处理多种货币,那么人们可能会像对待来自外太空的人那样对待你,所以你的里程可能会有所不同...

我认为对你是否设计好XML的一个很好的考验是:人类读者是否会在没有达到文档的情况下正确猜出这意味着什么?不是每个人都同意这种要求的观点,这有时是不切实际的。但省略小数点只是要求在线的某处错误处理数据。

答案 1 :(得分:7)

我用过这个

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

答案 2 :(得分: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货币代码,以避免在用户眼中出现任何混淆 - 例如,他们可能不知道英镑是否为英镑或UKP。