Java 是否存在行为类似于Double.toString的十进制格式?
我想为Java 是否存在行为类似于Double.toString的十进制格式?,java,floating-point,formatting,Java,Floating Point,Formatting,我想为DecimalFormat找到一种格式字符串(模式),其工作原理类似于将双倍数字转换为字符串,例如使用double.toString(double) 示例: 1 → "1.0" 123456.789 → "123456.789" 1e50 → "1.0e50" 这样的格式存在吗?根据我目前所能确定的,没有一种单一的DecimalFormat模式可以模拟Double.toString(这对我来说似乎很奇怪),但是它可以用两种模式和一个幅度范围来完成,如中所述 以下是一种似乎可以完成这项工作
DecimalFormat
找到一种格式字符串(模式),其工作原理类似于将双倍数字转换为字符串,例如使用double.toString(double)
示例:
1 → "1.0"
123456.789 → "123456.789"
1e50 → "1.0e50"
这样的格式存在吗?根据我目前所能确定的,没有一种单一的
DecimalFormat
模式可以模拟Double.toString
(这对我来说似乎很奇怪),但是它可以用两种模式和一个幅度范围来完成,如中所述
以下是一种似乎可以完成这项工作的方法:
public static String fmt(final double d) {
final double a = Math.abs(d);
final boolean normal = a == 0 || a >= 1e-3 && a < 1e7;
final DecimalFormat f = new DecimalFormat(normal ?
"0.0##################" :
"0.0#################E0");
return f.format(d);
}
公共静态字符串fmt(最终双d){
最终双a=数学绝对值(d);
最终布尔法线=a==0 | | a>=1e-3&&a<1e7;
最终判定格式f=新判定格式(正常?
"0.0##################" :
“0.0、0.0、0.0、0.0、0.0”;
返回f.format(d);
}
对于NaN和无穷大,它有不同的结果,但这些结果可以作为特殊情况处理。为什么需要
十进制格式?您不能将格式化程序
与code%g
一起使用吗?@JimGarrison,因为我想以类似的方式格式化数字,但略有不同,我想知道是否可以使用DecimalFormat
来实现这一点(或任何其他涉及格式字符串的替代方法)。另外,Formatter
与%g
的结果与我给出的示例完全不同。使用Double.toString()
怎么样?为什么它必须是DecimalFormat
?@JimGarrison,因为我想以类似的方式格式化数字,但略有不同,我想知道我是否可以使用DecimalFormat
(或任何其他涉及格式字符串的替代方法)我建议您提问,并准确解释您想要实现的格式规则。因为你没有分享“相似的方式,但略有不同”的意思,我不确定这里的任何人如何能帮助。