我发现自己写的东西很多:
if isnumeric(X) & ~isnan(X)
% etc etc
end
在我用自己的测试混淆命名空间之前
function out = isanumber(X)
out = isnumeric(X) & ~isnan(X);
end
MATLAB是否已经进行了等效测试?
答案 0 :(得分:3)
不,没有。
NaN
是一个数字类(默认情况下为double
,符合IEEE754),这使isnumeric
在传递true
时评估为NaN
。我会马上承认看似琐碎的
isnumeric ( not a number )
实际上赋予 true 有点违反直觉,但是当你从文件中读取大量数据时它非常有意义,并且因此读取的矩阵的一些元素是{{ 1}}(缺失,错误或类似) - 在这种情况下,如果NaN
会说isnumeric(NaN)
,那么会非常烦人。
和往常一样,这一切都取决于你如何看待它。 MathWorks决定(很可能经过大量研究)认为返回false
有意义的情况要远远多于相反的情况。因此,您必须始终手动测试两种我害怕的情况。
顺便说一句,如果你只是把它作为一个子函数或嵌套函数,你就不会那么混乱:
true
答案 1 :(得分:2)
您很可能需要isfinite(X)
。
不可否认,它与isnumeric(X) & ~isnan(X)
不完全相同,相当于isnumeric(X) & ~isnan(X) & ~isinf(X)
,但我猜你不想要其他特殊情况(加上和减去无穷大)。