Double.toString() 默认正确处理 Infinity、-Infinity 和 NaN,分别返回 "Infinity"、"-Infinity"、"NaN";自定义显示需用 equals() 判断后替换,推荐封装为 formatDouble() 工具方法。

Java 中 Double.toString() 本身已能正确处理 Infinity、-Infinity 和 NaN,会分别转为字符串 "Infinity"、"-Infinity" 和 "NaN"。但若需自定义显示(如显示为 "∞" 或 "N/A"),需在调用后做判断和替换。
默认行为:Double.toString() 对特殊值的处理
无需额外处理即可安全转换,包括边界情况:
-
Double.toString(Double.POSITIVE_INFINITY)→"Infinity" -
Double.toString(Double.NEGATIVE_INFINITY)→"-Infinity" -
Double.toString(Double.NaN)→"NaN" - 普通数值(如
3.14159)按常规科学计数或十进制格式输出,精度自动适配
自定义 Infinity 显示(如显示为 "∞")
若 UI 或报表要求更简洁/符号化表达,可对结果字符串做条件替换:
double value = Double.POSITIVE_INFINITY;
String s = Double.toString(value);
if ("Infinity".equals(s)) {
s = "∞";
} else if ("-Infinity".equals(s)) {
s = "-∞";
} else if ("NaN".equals(s)) {
s = "N/A";
}
注意:必须用 equals() 比较字符串,避免 == 引发误判;顺序建议先判 "Infinity" 和 "-Infinity",再判 "NaN"(因 "NaN" 不含符号,无歧义)。
更健壮的封装方法(推荐复用)
将逻辑提取为工具方法,兼顾可读性与空值防护:
public static String formatDouble(double d) {
String s = Double.toString(d);
if ("Infinity".equals(s)) return "∞";
if ("-Infinity".equals(s)) return "-∞";
if ("NaN".equals(s)) return "N/A";
return s;
}
调用示例:formatDouble(1.0 / 0.0) 返回 "∞";formatDouble(Math.sqrt(-1)) 返回 "N/A"。
注意事项与常见误区
不要用 String.valueOf(d) 替代 —— 它底层调用的正是 Double.toString(),行为完全一致,无优势。
避免直接拼接或正则替换 —— 如用 s.replace("Infinity", "∞") 会错误影响类似 "1.7976931348623157E308" 这类含子串的正常数字。
区分 Double 包装类与基本类型 —— 若变量是 Double 对象,先判 null,再调用 toString() 或解包:
Double d = getSomeDouble(); String s = (d == null) ? "null" : formatDouble(d.doubleValue());

















