How to display values with formatting, converting numbers to strings.
Ältere Kommentare anzeigen
if size(cost,1) == 2
A = (4*Pdt*cost(1,3)*cost(2,3)) + 2*(cost(1,2)*cost(2,3))+(cost(1,3)*cost(2,2));
B = 2*(cost(2,3)+cost(1,3));
lambda = num2str(A ./ B);
set(handles.answer1_staticText,'String', lambda);
P1 = (lambda - cost(1,2))./(2*cost(1,3));
P2 = (lambda - cost(2,2))./(2*cost(2,3));
PT = mat2str(P1 + P2);
set(handles.answer2_staticText,'String', PT);
guidata(hObject, handles);
end
From the coding above, the answer become like this :
[11.75 11.25 11.25 11.75 10.75 11.5 12.75 12.75 13]
My question is I want to display my answer at the static text box like this:
P1 = (%answer for P1)
P2 = (%answer for P2)
P TOTAL = (%answer for PT)
Can anyone help me with the coding?
Akzeptierte Antwort
Weitere Antworten (8)
Matt Tearle
am 13 Feb. 2011
0 Stimmen
If I interpret your question correctly, you're asking how to get the nicely formatted output in the text box. If that's the case, use sprintf instead of mat2str to define the string PT before using set.
slumberk
am 13 Feb. 2011
0 Stimmen
3 Kommentare
Paulo Silva
am 13 Feb. 2011
string1=mat2str(P1);
string2=mat2str(P2);
string3=mat2str(P1+P2);
set(handles.answer2_staticText,'String', {['P1 =' string1],['P2 =' string2],['PT =' string3]});
Paulo Silva
am 13 Feb. 2011
Similar code with sprintf:
PTM=sprintf('P1=%s\nP2=%s\nPT=%s',mat2str(P1),mat2str(P2),mat2str(P1+P2));
set(handles.answer2_staticText,'String', PTM);
Matt Tearle
am 13 Feb. 2011
No worries, I just wanted to make sure I was answering the right question! Paulo's response is what I was thinking - the key being the use of \n to get line breaks. (Thx Paulo)
BTW, another way to get multiple lines is the use char(10) to print a line break: txt = ['string1',char(10),'string2']
slumberk
am 14 Feb. 2011
0 Stimmen
Matt Tearle
am 14 Feb. 2011
function multilinetext
hf = figure;
uicontrol(hf,'style','pushbutton','string','update',...
'position',[100,100,60,20],'callback',@updatetxt);
hin = uicontrol(hf,'style','edit','position',[100,140,200,20]);
hout = uicontrol(hf,'style','text','position',[100,180,200,60]);
function updatetxt(~,~,~)
txt = get(hin,'string');
x = str2num(txt);
y = 2*x;
strng = ['x = ',txt,char(10),'y = ',mat2str(y),...
char(10),'sum = ',mat2str(x+y)];
set(hout,'string',strng)
end
end
3 Kommentare
Matt Tearle
am 14 Feb. 2011
Or, if you prefer:
strng = sprintf('x = %s\ny = %s\nz = %s',txt,mat2str(y),mat2str(x+y));
slumberk
am 14 Feb. 2011
Matt Tearle
am 14 Feb. 2011
this was just a standalone function to show how to use char(10). without your full code, I can't really test an answer to be sure that it will work, but I'll give it a go...
slumberk
am 14 Feb. 2011
3 Kommentare
Paulo Silva
am 14 Feb. 2011
I tried the code and it's working fine here.
slumberk
am 14 Feb. 2011
Paulo Silva
am 14 Feb. 2011
I used the exactly same code but had to use other values because I have no idea what's that Pdt and cost, I just commented the first lines and used P1=[1 2 3];P2=[4 5 6]
slumberk
am 14 Feb. 2011
1 Kommentar
Paulo Silva
am 14 Feb. 2011
I believe the problem is related to the type of object, if you have edit text boxes you might have to change the Max value property, this is from the Matlab Help:
If the edit text Max and Min properties are set such that Max - Min > 1, the user can enter multiple lines. For example, setting Max to 2, with the default value of 0 for Min, enables users to enter multiple lines.
Matt Tearle
am 14 Feb. 2011
Try this (as a cut/paste replacement of the code you posted):
if size(cost,1) == 2
A = (4*Pdt*cost(1,3)*cost(2,3)) + 2*(cost(1,2)*cost(2,3))+(cost(1,3)*cost(2,2));
B = 2*(cost(2,3)+cost(1,3));
lambda = num2str(A ./ B);
set(handles.answer1_staticText,'String', lambda);
P1 = (lambda - cost(1,2))./(2*cost(1,3));
P2 = (lambda - cost(2,2))./(2*cost(2,3));
string1=mat2str(P1);
string2=mat2str(P2);
string3=mat2str(P1+P2);
set(handles.answer2_staticText,'String',...
['P1 = ',string1,char(10),...
'P2 = ',string2,char(10),'PT = ',string3]);
guidata(hObject, handles);
end
9 Kommentare
slumberk
am 14 Feb. 2011
slumberk
am 14 Feb. 2011
Paulo Silva
am 14 Feb. 2011
see my answer above, you might need to change the Max property of answer2_staticText, do this before your code:
set(handles.answer2_staticText,'Max',2)
slumberk
am 14 Feb. 2011
slumberk
am 14 Feb. 2011
slumberk
am 14 Feb. 2011
Paulo Silva
am 14 Feb. 2011
doc mat2str
you will find that you can add another argument to mat2str, it's the precision, example:
mat2str(P1,4)
slumberk
am 14 Feb. 2011
Matt Tearle
am 14 Feb. 2011
ah, i think i finally understand what's going on here. answer2_staticText isn't actually a static text uicontrol -- it's an editable text uicontrol, right? uicontrol of style 'text' doesn't have the multiline restriction; style 'edit' does.
slumberk
am 14 Feb. 2011
0 Stimmen
Kategorien
Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!