Database JAXB,BigDecimal还是double?
我在不同的web服务上工作,并且总是首先使用WSDL JAXB为以下类型生成:Database JAXB,BigDecimal还是double?,database,jaxb,double,bigdecimal,Database,Jaxb,Double,Bigdecimal,我在不同的web服务上工作,并且总是首先使用WSDL JAXB为以下类型生成: <xsd:simpleType name="CurrencyFormatTyp"> <xsd:restriction base="xsd:decimal"> <xsd:totalDigits value="13"/> <xsd:fractionDigits value="2"/> <xsd:minInclus
<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>
正确的方法是什么
BigDecimal
到double
)double
到Bigdecimal
并在一个对象类型中执行所有算术运算。您永远不希望使用格式(例如Java中的
double
和float
)进行货币运算,因为它们的精度有限,并且设计用于保存从测量中获得的值(在这种情况下,它们一开始就不是绝对精确的,在这种情况下,有限的精度就不是问题了)
是关于这个主题的文章。这篇文章有点重数学,但理解这一点确实很有帮助(或者,迈克尔·博格沃德链接的文章更容易理解,并且仍然演示/解释了这个问题)
为避免此类问题,请确保在代码中专门使用BigDecimal
,并且所有外部存储/传输点也使用定点/任意精度值(即,您的数据库也不应存储浮点数)。- 阅读
- 切勿对金额使用
或double
float
- 改用
,这正是它的用途BigDecimal
BigDecimal
进行所有计算,并确保使用能够在存储中保持相同精度的数据类型(大多数数据库具有定点数据类型,通常称为“decimal”或类似的数据类型).我将数据库类型转换为十进制,并使用BigDecimal类型进行所有计算。我的问题现在已解决。谢谢。
<ns5:charge>0.200000000000000011102230246251565404236316680908203125</ns5:charge>
<ns5:addcharge>0.0360000000000000042188474935755948536098003387451171875</ns5:addcharge>
<ns5:tax>0.047199999999999998900879205621095024980604648590087890625</ns5:tax>
<ns5:totalextax>0.2360000000000000153210777398271602578461170196533203125</ns5:totalextax>