Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否存在行为类似于Double.toString的十进制格式?_Java_Floating Point_Formatting - Fatal编程技术网

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
(或任何其他涉及格式字符串的替代方法)我建议您提问,并准确解释您想要实现的格式规则。因为你没有分享“相似的方式,但略有不同”的意思,我不确定这里的任何人如何能帮助。