在阅读了几个关于用于货币/货币的Java数据类型的问题之后,我决定使用int / long方法,将货币/货币的价值存储为最低单位(例如美分)
这是否也适用于存储数据(使用XML格式)?
我想到的第一件事是,因为它在存储数据时只会被“解析”为 XML十进制格式,而在我读取数据时会再次“解析”回来
欢迎任何建议,因为我是新手。
答案 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。