Xsd 如何告诉jaxb在编组为xml时截断BigDecimal?

Xsd 如何告诉jaxb在编组为xml时截断BigDecimal?,xsd,jaxb,bigdecimal,Xsd,Jaxb,Bigdecimal,我有两门课: @XmlAccessorType(XmlAccessType.FIELD) public class OpportunityLocation { @XmlElement private LatitudeLongitude coordinates; [...] } public class LatitudeLongitude implements Serializable { private BigDecimal latitude; pri

我有两门课:

@XmlAccessorType(XmlAccessType.FIELD)
public class OpportunityLocation
{

    @XmlElement
    private LatitudeLongitude coordinates;
    [...]
}

public class LatitudeLongitude implements Serializable
{
    private BigDecimal latitude;
    private BigDecimal longitude;
    [...]
}
OpportunityLocation
被序列化时,我得到

<location>
    [...]
    <coordinates>
    <latitude>51.53684899999999657893567928113043308258056640625</latitude>
    <longitude>-0.1325880000000000114024345521102077327668666839599609375</longitude>
    </coordinates>
(经度相同)

描述坐标的xsd片段是

<xs:complexType name="latitudeLongitude">
    <xs:all>
        <xs:element name="latitude" type="xs:decimal"/>
        <xs:element name="longitude" type="xs:decimal"/>
    </xs:all>
</xs:complexType>

我认为最好的解决方案是截断lat/long值,因为一开始就没有必要有这么高的精度


如何指示JAXB执行此操作?

您可以使用
XmlAdapter
执行此操作。下面是一个类似的示例,演示了Joda时间类的概念:


或只需使用BigDecimal.setScale()。如果适用于您的情况,则不需要XmlAdapter

BigDecimal bd = new BigDecimal((double) 1.2345);
bd = bd.setScale(2, RoundingMode.HALF_UP);

谢谢有没有这样的选项可以直接用Double而不是BigDecimal?
BigDecimal bd = new BigDecimal((double) 1.2345);
bd = bd.setScale(2, RoundingMode.HALF_UP);