Если мое предположение верно, то ваш friendly_output
имеет тип char
Чтобы проверить это, попробуйте следующее:
class(friendly_output)
Если вам нужно сравнить его с целым числом, вам нужно преобразовать его обратно к числу.
Для этого добавьте этот код после первой строки
friendly_output = str2double(friendly_output);
%// changed from `eval` to `str2double` as suggested by @horchler
%// Using `str2double` over `eval` or `str2num` is a best practice.
%// or you could just avoid `num2str` conversion
PS:
Оператор &&
не работает для вас, потому что они хорошо работают только на скалярные входов. Но поскольку переменная friendly_output
представляет собой массив char
, вы получили ошибку.
Пока &
работает с входами массива, каждый символ сначала преобразуется в соответствующее значение ASCII, а затем сравнивается с номером. Поэтому, хотя Matlab не публикует сообщение об ошибке, результаты не будут благоприятны для вас.
Для получения дополнительной информации о разнице между &
и &&
Вот пример того, что происходит, когда вы не преобразовать строку обратно в номер:
>> a = '1200.5'
a =
1200.5
>> a > 1000
ans =
0 0 0 0 0 0
ASCII- значения char 0-9
колеблется от 49-57
, в то время как значение ASCII char '.'
is 46
Although, 1200.5 is greater than 1000, it actually calculate this way
50(char '1') is not greater than 1000.
51(char '2') is not greater than 1000.
49(char '0') is not greater than 1000.
49(char '0') is not greater than 1000.
46(char '.') is not greater than 1000.
54(char '5') is not greater than 1000.
Непонятно, почему вы используете 'num2str' в первую очередь. Если вы распечатаете переменную 'friendly_output' и' size (friendly_output) ', вы увидите, что это не скаляр. Теперь попробуйте «help &» и «help &&» в окне команд. Также см. [Этот ответ] (http://stackoverflow.com/a/1379497/2278029). – horchler
Удалите num2str или используйте str2num на friendly_output. Если вы хотите сравнить строки, используйте strcmp. – Arturo