在阅读了一些关于Java数据类型在货币/金钱方面的使用问题后,我决定采用 int/long 方法,其中您将货币/金钱的值存储为其最低单位(例如美分)。
这个方法也适用于存储数据吗(在 XML 中)?
我首先想到的是不行,因为它只会在存储数据时“解析”为XML十进制格式,并在读取数据时再次被“解析”。
欢迎任何建议,因为我对此还很陌生。
在阅读了一些关于Java数据类型在货币/金钱方面的使用问题后,我决定采用 int/long 方法,其中您将货币/金钱的值存储为其最低单位(例如美分)。
这个方法也适用于存储数据吗(在 XML 中)?
我首先想到的是不行,因为它只会在存储数据时“解析”为XML十进制格式,并在读取数据时再次被“解析”。
欢迎任何建议,因为我对此还很陌生。
<amount currency="GBP">230.45</amount>
但如果你在美国,如果你敢建议处理多种货币,人们可能会把你当成外星人,所以你的经验可能会有所不同...
我认为一个好的测试是否正确设计了XML是:人类读者是否能够在不查阅文档的情况下正确猜测其含义?并非所有人都共享这种要求,有时也是不切实际的。但省略小数点只会导致数据在某个环节被错误处理。
i used this
<xsd:simpleType name="money">
<xsd:restriction base="xsd:decimal">
<xsd:fractionDigits value="2"/>
</xsd:restriction>
</xsd:simpleType>
fractionDigits
作为 decimal
的限制,而不是 scale
。 - Vihung我曾经使用过这个
<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。