4

许多语言都有 isNaN() 函数。我在问自己:为什么要检查不是数字

原因是纯粹合乎逻辑的还是检查not a number而不是is a number更快?

请注意,这是一个纯粹的理解问题。例如,我知道我可以否定 isNaN() 来实现 isNumber() 函数。
但是我正在寻找为什么我们不检查数字的原因?

4

7 回答 7

7

在计算中,NaN(非数字)是数字数据类型的值,表示未定义或无法表示的值,尤其是在浮点计算中。

维基文章

因为 Not a Number 是表达式的特例。

您不能只使用 0 或 -1 或类似的东西,因为这些数字已经有意义。

不是数字意味着计算中出现了问题,无法从中计算出有效数字。

它与拥有null. 当然,我们可以指定一个任意数值来表示null,但这会令人困惑,并且我们会在极端情况下遇到各种奇怪的错误。

于 2010-10-07T19:23:35.593 回答
3

'Not a Number' 是特定浮点计算的结果。这不是关于“嘿,这个变量是 120 还是“abc”?

于 2010-10-07T19:23:59.533 回答
2

isThisCaseExceptional对我来说似乎比isEverythingNormal因为我可能会写更合理

possible_number = some_calculation();

if (inNaN(possible_number)) handle_the_surprise;

// .. keep going 

代替

possible_number = some_calculation();

if (inANumber(possible_number)) {

   // .. keep going 

} else {
   // handle the surprise
}
于 2010-10-07T19:26:42.897 回答
2

检查它是否不是数字,因为假设它是一个数字。当您期望一个数值时,NaN 是一种例外情况,因此对我来说这样做是有道理的。毕竟,我宁愿不经常检查 isNaN 而不是经常检查值 isNum 。

于 2010-10-07T19:27:54.100 回答
1

这是一种报告错误情况(数学上未定义或超出技术限制)的方法。

于 2010-10-07T19:23:44.300 回答
0

如果计算结果不能用数字表示,例如 NaN 和 Inf,许多语言都有特殊的表示。因此 isNaN() 检查结果是否实际上是数字或 NaN 的特殊标记。

于 2010-10-07T19:24:46.660 回答
0

NaN 用于:

  • 非实数或未定义值。
  • 错误处理。使用 NaN 初始化变量允许您测试 NaN 并确保已将其设置为有效值。
  • Objects that ignore a member or property. For example, WPF uses NaN to represent the Width and Height of visual elements that do not define their own size.
于 2010-10-07T19:34:37.813 回答