JAXB中double类型的几位小数

8

我使用JAXB创建XML,我想在标签内放置double类型的值:

@XmlElement(name = "TaxFree")
private double taxFreeValue;

当我使用setTaxFreeValue(4.5);时,标签中显示为<TaxFree>4.5<TaxFree> 在JAXB中是否有可能在不将double转换为字符串的情况下获得<TaxFree>4.500<TaxFree>

对于双精度浮点数,4.5 == 4.500。所以我不是很明白你的问题。 - Hovercraft Full Of Eels
2
我需要将4.500格式转换成XML标记,我知道这个值是相同的。 - Juraj Ćutić
1
创建一个包装类,将字段转换为字符串,然后再转回来,这个怎么样? - Hovercraft Full Of Eels
谢谢,这可能是一个解决方案,但如果JAXB有某些注释可以创建这种格式呢? - Juraj Ćutić
如果您有另一个使用此XML的程序,并且该程序需要4.500而无法处理4.5,那么我建议该程序存在问题。 - Jim Garrison
3个回答

5
最简单的方法就是这样。
double taxFreeValue;

@XmlElement(name = "TaxFree")
private String getTaxFree() {
    return String.format("%.3f", taxFreeValue);
}

请注意,只要注释存在,您可以将此方法命名为任何名称并使其成为私有JAXB不关心。

对我来说有效,如果有人遇到问题,请确保检查您的类的 @XmlAccessorType。我将其设置为 @XmlAccessorType(XmlAccessType.NONE),因此只考虑了 @XmlElement 注释进行编组。 - Touniouk

4

1
谢谢,您有一个很棒的博客可以学习,这里有关于JAXB的答案。 - Juraj Ćutić

1
我发现最干净的方法是使用XMLAdapter。创建一个DoubleAdapter类,其中包含:
public class DoubleAdapter extends XmlAdapter<String, Double> {
    @Override
    public Double unmarshal(String v) throws Exception {
        if (v == null || v.isEmpty() || v.equals("null")) {
            return null;
        }
        return Double.parseDouble(v);
    }

    @Override
    public String marshal(Double v) throws Exception {
        if (v == null) {
            return null;
        }
        //Edit the format to your needs
        return String.format("%.3f", v);
    }
}

使用它,只需添加注释即可。
@XmlElement(name = "TaxFree")
@XmlJavaTypeAdapter(DoubleAdapter.class)
private double taxFreeValue;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接