【发布时间】:2011-04-22 13:21:29
【问题描述】:
许多语言都有 isNaN() 函数。我在问自己:为什么要检查不是数字?
原因纯粹是合乎逻辑的还是检查 not a number 而不是 is a number 更快?
注意这是一个纯粹的理解问题。例如,我知道我可以否定 isNaN() 来实现 isNumber() 函数。
但是,我正在寻找我们检查 不是数字的原因?
【问题讨论】:
标签: numbers floating-point logic ieee-754
许多语言都有 isNaN() 函数。我在问自己:为什么要检查不是数字?
原因纯粹是合乎逻辑的还是检查 not a number 而不是 is a number 更快?
注意这是一个纯粹的理解问题。例如,我知道我可以否定 isNaN() 来实现 isNumber() 函数。
但是,我正在寻找我们检查 不是数字的原因?
【问题讨论】:
标签: numbers floating-point logic ieee-754
NaN 用于:
【讨论】:
检查它是否不是数字,因为假设它是一个数字。当您期望一个数值时,NaN 是一种例外情况,因此对我来说这样做是有道理的。毕竟,我宁愿不经常检查 isNaN 而不是经常检查值 isNum。
【讨论】:
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
}
【讨论】:
如果计算结果不能用数字表示,许多语言都有特殊的表示,例如 NaN 和 Inf。所以 isNaN() 检查结果是否实际上是一个数字或 NaN 的特殊标记。
【讨论】:
'Not a Number' 是特定浮点计算的结果。这不是关于“嘿,这个变量是 120 还是“abc”?'
【讨论】:
这是一种报告错误情况(数学上未定义或超出技术限制)的方法。
【讨论】:
在计算中,NaN(非数字)是 数值数据类型的值 表示未定义的或 不可代表的价值,尤其是在 浮点计算。
因为 Not a Number 是表达式的特例。
你不能只使用 0 或 -1 或类似的东西,因为这些数字已经有意义。
Not a Number 表示计算中出现问题,无法从中计算出有效数字。
这与拥有null 的思路相同。当然,我们可以指定一个任意数值来表示 null,但这会令人困惑,而且我们会在极端情况下遇到各种奇怪的错误。
【讨论】: