我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:
我正在处理不同的网络服务,我总是使用WSDL First。
JAXB生成的类型如下:
<xsd:simpleType name="CurrencyFormatTyp">
<xsd:restriction base="xsd:decimal">
<xsd:totalDigits value="13"/>
<xsd:fractionDigits value="2"/>
<xsd:minInclusive value="0.01"/>
</xsd:restriction>
</xsd:simpleType>
在JAXB规范中提到的Java绑定类型BigDecimal
。
当我使用double
类型的值进行一些简单的算术运算时(这些值存储在数据库中,并通过Hibernate映射到double
类型),我遇到了麻烦。
<ns5:charge>0.200000000000000011102230246251565404236316680908203125</ns5:charge>
<ns5:addcharge>0.0360000000000000042188474935755948536098003387451171875</ns5:addcharge>
<ns5:tax>0.047199999999999998900879205621095024980604648590087890625</ns5:tax>
<ns5:totalextax>0.2360000000000000153210777398271602578461170196533203125</ns5:totalextax>
什么是正确的方法?
- 将所有值转换为double(从
BigDecimal
到double
的JAXB绑定) - 将
double
映射到Bigdecimal
(使用Hibernate)
并且在一个对象类型中执行所有算术操作。
BigDecimal
进行所有计算,并确保使用一种可以在存储中保持相同精度的数据类型(大多数数据库都有固定点数据类型,通常称为“decimal”或类似名称)。 - Joachim Sauer