私はさまざまな 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>
Java バインディング タイプBigDecimal
(JAXB 仕様で言及されているとおり)。
double
次に、型の値(データベースに格納され、休止状態を介して 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 に変換します (JAXB バインディング から
BigDecimal
へdouble
) - へのマッピング
double
を休止状態にするBigdecimal
すべての算術演算を 1 つのオブジェクト タイプで実行します。