Ale*_*lex 4 database double jaxb bigdecimal
我从事不同的Web服务,我总是使用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>
Run Code Online (Sandbox Code Playgroud)
Java绑定类型BigDecimal(如JAXB规范中所述).
然后,当我使用类型的值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>
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法?
BigDecimal到double)double到Bigdecimal并在一个对象类型中执行所有算术运算.
Joa*_*uer 10
你永远不希望使用浮点格式(如double和float货币业务在Java中),因为他们已经精度的限制,并已设计成认为,在某种程度上,从测量得到的值(在这种情况下,它们不是绝对精确首先,在这种情况下,有限的精度不是一个问题).
每个计算机科学家应该知道什么关于浮点运算是关于这个主题的文章.这是对数学有点重,但它确实有助于理解(或者,由迈克尔博格瓦特链接到文章是很多容易理解,仍然证明/说明问题).
要避免此类问题,请确保BigDecimal在代码中使用,并且所有外部存储/传输点也使用定点/任意精度值(即,您的数据库也不应存储浮点数).
| 归档时间: |
|
| 查看次数: |
8124 次 |
| 最近记录: |