for loop or str2num incorrectly adding 48 to results?
4 ビュー (過去 30 日間)
古いコメントを表示
Kirston Barton
2017 年 3 月 23 日
コメント済み: Kirston Barton
2017 年 3 月 24 日
I have the following code (which was part of a homework assignment, but I have solved the problem), I just don't understand why between lines 10 and 11, this code is adding 48 to the gg when it inserts it into vector q? I solved it by subtracting 48 from gg on line 10, but this makes no sense to me (first of all why I have to do it and second of all why is allows me to subtract 48 when I have converted it to a string on line 8). Can someone please explain what is going on here. It is driving me crazy! I have tried on two computers with tons of different inputs, completely closed and reopened matlab, cleared all values...It keeps happening.
a='1234567890'; aa='1234567890'; function b=add(a,aa) k=0; for i=10:-1:1 f=str2num(a(i))+str2num(aa(i))+k; if f > 10 g = num2str(f); gg=g(2); q(i)=gg; k=str2num(g(1)); else q(i)=f; end end
0 件のコメント
採用された回答
Michelangelo Ricciulli
2017 年 3 月 24 日
It is doing that because every character of the string '10', is memorized in matlab with an encoding. So '0' is actually stored as a 48 and for example '1' is stored as 49, 'a' is 97 , etc...
If you want the number represented in a character, you should use
q(i)=str2num(gg);
because this will convert the char to an integer.
その他の回答 (1 件)
Jan
2017 年 3 月 24 日
編集済み: Jan
2017 年 3 月 24 日
This is the effect of confusing the number 0 with the character '0'. When you add the character '0' to a number or append it to a numerical array, its ASCII value is used, and this is 48:
double('0')
x = 1
x = [x, '0']
The same happens for '1', which has the ASCII code 49.
You code contain several bugs:
- The output b is not created
- In the case f>10 you append a character to q(i), but in the other case you append the number f.
- Defined before the loop if q is a double of char vector. Otherwise this depends on the first assignment.
- What happens for f==10?
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!