I have this nested if statements under a for loop. I want the for loop to calculate 3.1*5^2. And if the answer is 77.5, it should solve 3.1*3^2. Also if that equals 27.9. It should stop the for loop. But it seems to continue. Please help.
clc
A=['3' '.' '1' '*' '^' '2']
for n=0:length(A)
try
d=[A(1:n) '5' A(n+1:end)]
c=eval(d)
if c==77.5
e=[A(1:n) '3' A(n+1:end)]
j=eval(e)
if j==27.9
return
end
end
end
end

댓글 수: 1

Rik
Rik 2021년 8월 8일
You should compare to a tolerance. (i.e. abs(value-target)<=tol;)
You should also remove those eval calls.

댓글을 달려면 로그인하십시오.

 채택된 답변

Awais Saeed
Awais Saeed 2021년 8월 8일

0 개 추천

eval(e) will never be equal to 27.9. To know the reason you have to set the output format from short(default) to long. After doing
format long
you will see that
eval(e) = 27.900000000000002
The workaround would be to remove unwanted numbers after decimal point and then compare. This is how I did it
clc
A=['3' '.' '1' '*' '^' '2']
for n=0:length(A)
try
d=[A(1:n) '5' A(n+1:end)]
c=eval(d)
if c==77.5
e=[A(1:n) '3' A(n+1:end)]
j=eval(e)
S = sprintf('%f',j); % convert it to string
[idx,~]=regexp(S,'[.]'); % search for decimal point
S(idx+2:end) = []; % delete everything from idx+2 till end
if isequal(S,'27.9') % compare S (modified eval(e)) with '27.9' char
return
end
end
end
end

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Language Support에 대해 자세히 알아보기

태그

질문:

2021년 8월 8일

답변:

2021년 8월 8일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by