在 Java 中使用 xstream 转换为 xml 时如何避免大双精度数的科学记数法
Posted
技术标签:
【中文标题】在 Java 中使用 xstream 转换为 xml 时如何避免大双精度数的科学记数法【英文标题】:How to avoid scientific notation of a large double while converting to xml with xstream in Java 【发布时间】:2014-04-03 02:34:08 【问题描述】:我正在使用xstream
将对象转换为 xml 格式,而该类具有双字段。
最近我发现了一个像140936219.00
这样的大double对象
但是在输出的xml文件中,变成了:
<Person>
<name>Mike</name>
<amount>1.40936219E8</amount>
<currency>USD</currency>
<currencyAmount>1.40936219E8</currencyAmount>
</Person>
Java 中的代码如下:
XStream xstream = new XStream(new DomDriver());
xstream.alias("Person", PersonBean.class);
return xstream.toXML(person);
请问在这种情况下如何避免科学记数法?基本上我想要的是:
<Person>
<name>Mike</name>
<amount>140936219.00</amount>
<currency>USD</currency>
<currencyAmount>140936219.00</currencyAmount>
</Person>
【问题讨论】:
【参考方案1】:您可以定义自己的转换器。例如
import com.thoughtworks.xstream.converters.basic.DoubleConverter;
public class MyDoubleConverter extends DoubleConverter
@Override
public String toString(Object obj)
return (obj == null ? null : YourFormatter.format(obj));
然后将其注册到具有高优先级的 XStream 对象中
XStream xstream = new XStream(new DomDriver());
xstream.alias("Person", PersonBean.class);
xstream.registerConverter(new MyDoubleConverter(), XStream.PRIORITY_VERY_HIGH);
return xstream.toXML(person);
【讨论】:
这就是解决方案。 BTWxstream
调用 toString(Object obj)
方法将对象转换为 xml?
是的。所有 SingleValueConverters 都必须覆盖 toString 以表示单值对象。对于更复杂的对象,您可以查看 com.thoughtworks.xstream.converters.Converter(这些类型的转换器可能以相同的方式注册)。【参考方案2】:
您可以使用 DecimalFormat 类,例如:
import java.text.DecimalFormat;
...
double yourBigNumber = 140936219.00;
DecimalFormat formater = new DecimalFormat("#.#"); //if you want to make it so it keeps the .00s
//then change the "#.#" to a "#.00".
String newNumber = formater.format(yourBigNumber);
System.out.println(newNumber); //Not needed ( if you couldn't tell :) )
现在您可以对大数字的 String 值做任何您想做的事情,注意 String 不是科学计数法。
【讨论】:
我知道这是一种通用的方式。但在可能的情况下,我需要将person
对象传递给xstream
以进行xml 转换,并且person
对象包含一个double 类型的字段。格式化后变成String
以上是关于在 Java 中使用 xstream 转换为 xml 时如何避免大双精度数的科学记数法的主要内容,如果未能解决你的问题,请参考以下文章
使用XStream是实现XML与Java对象的转换--简介及入门示例