为什么我们有“不是数字”(isNan)的功能?

时间:2010-10-07 19:20:47

标签: numbers floating-point logic ieee-754

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

理由是纯逻辑还是更快检查而不是数字而不是是数字

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

7 个答案:

答案 0 :(得分:7)

  

在计算中,NaN(非数字)是一个   数值数据类型的值   表示未定义或   不具代表性的价值,特别是在   浮点计算。

Wiki Article

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

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

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

null的思路相同。当然,我们可以指定一个任意数值来表示null,但这会让人感到困惑,我们会在角落情况下遇到各种奇怪的错误。

答案 1 :(得分:3)

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

答案 2 :(得分: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
}

答案 3 :(得分:2)

检查是否不是数字,因为假设它是一个数字。当你期望一个数值时,NaN是一个例外情况,所以我这样做是有意义的。毕竟,我宁愿经常检查isNaN是否经常检查值是否为Num。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

如果计算结果无法用数字表示,则许多语言都有特殊表示,例如NaN和Inf。所以isNaN()检查,如果结果实际上是数字或NaN的特殊标记。

答案 6 :(得分:0)

NaNs用于:

  • 非真实或未定义的值。
  • 错误处理。使用NaN初始化变量允许您测试NaN并确保它已设置为有效值。
  • 忽略成员或属性的对象。例如,WPF使用NaN来表示未定义自己大小的可视元素的宽度和高度。