gpt4 book ai didi

java - 双数据类型解析 "NaN"为 "NaN"为什么?

转载 作者:行者123 更新时间:2023-12-03 19:48:44 26 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




8年前关闭。




我将“NaN”值解析为双倍,它给了我“NaN”。

double  d = Double.parseDouble("NaN");
System.out.println(d);

它正在打印“NaN”值。我很惊讶,因为我会 expect将非数字解析为 double 将导致 NumberFormatException在 java 。

谁能解释为什么解析成功,以及变量中真正存储了什么?

最佳答案

您可能会惊讶于这个特殊值可能存储在 double 中。多变的。这是因为 Java 使用 IEEE 754 标准进行浮点表示。

该标准不仅允许表示特定的有理数,还允许表示一些特殊值,例如正无穷大或负无穷大,它们本质上是非常大的数字 - 计算结果产生的结果比任何可表示的有理值都大。 (也有非正规数,介于有限值和无限值之间;与您习惯的精度相比,它们的精度有所降低,但不像无穷大那样极端。精度损失是由于给了更多空间以尾数为代价的指数。)

然而,一个 NaN不是无穷大,也不是上溢或下溢的指标。这不是任何计算的不准确结果。它是一个非值,类似于 NULL在数据库中。事实上,在你的程序中试试这个:

System.out.println(d == d)

它将打印出 false .

为什么是假的?粗略地说,如果你不知道两个量的值,就没有理由假设它们是相同的值。他们通常不是。

看到 NaN 实际上是很不寻常的。输入到 double.ParseDouble ,除非在某种解码期间。

关于java - 双数据类型解析 "NaN"为 "NaN"为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com