Отобразить текст sprintf в тексте uicontrol MATLAB
Кажется, это должно быть просто. У меня есть uicontrol стиля текста:
x_text = uicontrol(f,'Style','text','String','X: ','Position', [10 220 50 20], 'HorizontalAlign','Left','FontName','Monospace','FontSize',12);
в какой-то момент позже я пытаюсь изменить текст, чтобы включить число. Я пробовал несколько методов, и каждый раз, когда я пытаюсь использовать формат, он терпит неудачу. Например
Работает
set(x_text, 'String', ['X: ' num2str(State(1))]);
Сбой
set(x_text, 'String', ['X: ' num2str(State(1),'%0.3f')]);
set(x_text, 'String', ['X: ' sprintf('%0.3f',State(1))]);
Как вы можете догадаться, я хочу установить количество знаков справа от десятичной точки, как я делал выше. Я что-то здесь упускаю?
Спасибо
3 ответа
Как насчет записи в 2 строки?
numStr=num2str(State(1),'%0.3f');
set(x_text, 'String', ['X: ',numStr]);
Все разумные предложения и вещи я попробовал. Оказывается, это было так же просто, как сделать формат "%#.3f", где # - это нечто большее, чем 0; то есть # определяет максимальное количество отображаемых символов, поэтому он отображал 0 из них. Я изменил его, например, на "%5.3f", и он работал нормально.
Спасибо за предложения.
Конкатенация строк с использованием матричных обозначений, таких как: [string1 string2]
(или с strcat
рутина кстати) довольно опасна на мой взгляд и часто приводит к "странному" поведению.
Предпочитаю всегда работать с sprintf
только:
txt = sprintf('X: %0.3f', State(1));
set(x_text, 'String', txt);
Или в одной строке:
set(x_text, 'String', sprintf('X: %0.3f', State(1)));