You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中double的字符串表示是否精确?该解析等式是否被Java保证?

问题

是否Java会保证以下等式始终成立?

Double.parseDouble(Double.toString(x)) == x

(编辑说明:改用parseDouble以避免不必要的装箱操作。)

回答

这个等式并非在所有场景下都成立,具体分情况讨论:

  • 当x为Double.NaN时:Double.toString(x)返回字符串"NaN",Double.parseDouble("NaN")会得到NaN,但Java中NaN == NaN的结果是false(因为NaN与任何值都不相等,包括自身),因此等式不成立。
  • 当x为Double.POSITIVE_INFINITY或Double.NEGATIVE_INFINITY时:toString会分别输出"Infinity"和"-Infinity",parseDouble解析后会得到对应的无穷大值,此时Infinity == Infinity、-Infinity == -Infinity结果均为true,等式成立。
  • 当x是有限的非NaN double值时:Java规范明确保证Double.parseDouble(Double.toString(x))会返回与x完全一致的double值,因此==比较结果为true,等式成立。这是因为Double.toString(x)会生成符合规范的最短十进制字符串,确保解析后能精确还原原数值。

总结:只有当x为NaN时等式不成立,其余场景下等式均被Java保证成立。

内容的提问来源于stack exchange,提问作者Michel Charpentier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:09:55