2014-09-01 3 views
2

숫자를 가져 와서 MATLAB에서 각 숫자의 값을 구할 수 있습니까? 결국, 각 자릿수를 문자로 만들고 싶습니다. 예를 들어 101은 first = '1', second = '0', third = '1'이됩니다. 나는 즉, 문장과 논리적 인 AND,숫자를 숫자로 분해하는 방법

if number & 1 == 1 third = '1'

경우 등을 사용하여이 작업을 수행 할 수 있다고 생각하지만 논리적 AND 연산은 MATLAB에서 이런 식으로 작동하지 않습니다 볼 수 있습니다. 나는 나의 것 또는 내가 놓치고있는 뭔가 다른 것을 제안 할 수있다. 관련성이있는 경우 내 번호는 항상 1 또는 0 만 갖습니다. 예를 들어 num2str와 역, str2num

+2

그냥 문자열로 변환 하시겠습니까? [num2str'] (http://www.mathworks.com/help/matlab/ref/num2str.html) 예를 들어 – Dan

+0

@ Dan을 참조하십시오. 그냥 문자열로 변환하고 싶지는 않습니다. 각 숫자가 필요합니다. 자체 문자열이 될 수 있습니다. 따라서 '101'은 '1', '0', '1'의 3 가지 변수로 바뀔 것입니다. – HRoot

+6

왜 각 숫자가 다른 문자열입니까? 'str = num2str (101);'을 사용하면'str (1)'(첫번째 자리),'str (2)'(두번째 자리) 등을 색인 할 수 있습니다. 별도의 변수를 갖는 것보다 훨씬 쉽습니다. –

답변

1

:

Number=1234; 

NumberString=num2str(Number); 

NumDigits=zeros(1,length(NumberString)); 

for ii=1:length(NumberString) 

    NumDigits(ii)=str2num(NumberString(ii)); 

end 

결과

NumDigits(3) 

ans=3 
+0

그냥 숫자를 char로 읽으 려한다면이 경우 str2num 루프를 그대로 두십시오. D – McMa

+0

이것은 거의 작동하지만 0을 실행하면 48이되고 1이 49가됩니다. 왜 이럴까요? – HRoot

+0

네, 알다시피, 당신은 '복식'으로 '문자'를 읽고 있습니다, 그렇죠? – McMa

4

당신이 substracting 문자열 이제

number = 10156; 
digits = num2str(number) - '0' 
digits = 

1  0  1  5  6 

에 의해 for 루프없이 끝낼 수 있습니다 digits은 벡터이며, 요소는 자릿수입니다. s 문자. 각 숫자에 대해 하나의 변수를 사용하는 것이 좋지 않다고 생각합니다. 그렇게하는 우아한 방법은 없습니다. (내가 당신의 예에서 그것을 읽을 때) 당신의 숫자는 양의 정수하지 않을 수 있습니다, 당신은 절대 값을 사용하여 기호를 제거하고 소수점을 제거 할 수 있습니다 당신은 대부분 수동으로

[first, second, third] = deal(z(1), z(2), z(3)) 

그것을 할 것입니다 (참조 Divakars 코멘트).

digits = strrep(num2str(abs(number)),'.','') - '0' 

Divakars는 거래를 피하는 방법에 대해 의견을 남기고 싶습니다.

+0

'var1 = mat2cell (digits, 1, ones (1, numel (digits)))''그리고 나서'[num1, num2, num3, num4, num5] = var1 {:}'는 분리 된 변수 '거래'를 피하십시오. – Divakar

+0

좋은 해결책은 그것을 밖으로 시도하고 당신이 -4.323을 사용한다면 당신은 -3 4 -2 3 2 3 결과를 얻는다. 마이너스 기호가 -3으로 변환되고 점이 -2로 변환됩니다. 왜 그런가? –

+0

음수 10 진수를 처리하는 한 가지 방법은 'digit = strrep (num2str (abs (number))', ',' ') -'0 ''이 될 수 있습니다. – Divakar

관련 문제