Рассмотрим NSString integerValue
- он возвращает NSInteger
. Однако он будет принимать некоторые строки, которые не являются полностью числовыми, и не предоставляет механизм для определения строк, которые не являются числовыми вообще. Это может или не может быть приемлемым.
Например, " 13 " -> 13
, "42foo" -> 42
и "helloworld" -> 0
.
Удачного кодирования.
Теперь, поскольку вышеизложенное было своего рода касательной к вопросу, см. , чтобы определить, является ли строка числовой . Код взят по ссылке, с добавлением комментариев:
BOOL isNumeric(NSString *s)
{
NSScanner *sc = [NSScanner scannerWithString: s];
// We can pass NULL because we don't actually need the value to test
// for if the string is numeric. This is allowable.
if ( [sc scanFloat:NULL] )
{
// Ensure nothing left in scanner so that "42foo" is not accepted.
// ("42" would be consumed by scanFloat above leaving "foo".)
return [sc isAtEnd];
}
// Couldn't even scan a float :(
return NO;
}
Выше работает только с scanFloat
- например, нет scanInt
- потому что диапазон с плавающей точкой намного больше , чем у целого (даже 64-битного целого).
Эта функция проверяет «полностью числовые» и принимает "42"
и "0.13E2"
, но отклоняет " 13 "
, "42foo"
и "helloworld"
.
Вы можете расширить свое определение ASDF следующим образом:
for i = 1:N
asdf(i) = (sum(x1.^2) - 2*sum(x1*circshift(x2,i-1)) + sum(x2.^2))/N;
end
, что упрощается до
asdf = (-2*ifft(fft(x1).*conj(fft(x2))) + sum(x1.^2) + sum(x2.^2))/N;