multiple digit number in to individual digits

조회 수: 99 (최근 30일)
Raza
Raza 2014년 7월 22일
편집: John D'Errico 2023년 2월 27일
i want to change the number 1123 in 1 1 2 3, want to split combine number into into individual numbers

채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2014년 7월 22일
a=1234
b=str2double(regexp(num2str(a),'\d','match'))
  댓글 수: 3
Walter Roberson
Walter Roberson 2017년 2월 7일
a = '123*+'
for K = 1 : length(a)
fprintf('character #%d of "%s" is "%c"\n', K, a, a(K));
end
Adam Danz
Adam Danz 2020년 4월 29일
For large values such as a=11122333345555566 this will not work since num2str will convert the value to '1.112233334555557e+16'. Otherwise nice solution.

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

추가 답변 (3개)

John D'Errico
John D'Errico 2014년 7월 22일
N = 1123;
Ndigits = dec2base(N,10) - '0'
Ndigits =
1 1 2 3
  댓글 수: 3
Michael Ramage
Michael Ramage 2020년 8월 28일
How to do this with a floating point number?
John D'Errico
John D'Errico 2023년 2월 27일
편집: John D'Errico 2023년 2월 27일
Not difficult with a floating point number, but remember that a float is NOT an exact decimal representation of that number. But...
X = 1.2345;
dec2base(X*10000,10)
ans = '12345'
or
dec2base(X*10000,10) - '0'
ans = 1×5
1 2 3 4 5
You can even fuss around and get the decimal point in there if you want, but if you want that, then sprintf is arguably a better choice.

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


Jan
Jan 2017년 2월 7일
편집: Jan 2017년 2월 14일
For getting the digits, a conversion to a string is an indirection. Staying at numerical values is usually faster:
N = 1123;
m = floor(log10(N)); % [EDITED] Thanks Stephen
D = mod(floor(N ./ 10 .^ (m:-1:0)), 10);
  댓글 수: 5
Jay Doshi
Jay Doshi 2022년 3월 25일
If the number is 0006, and i want all four numbers. What can I do? Because this method just gives me d = 6.
Stephen23
Stephen23 2022년 3월 25일
N = 6;
m = 3; % order
d = mod(floor(N ./ 10 .^ (m:-1:0)), 10)
d = 1×4
0 0 0 6

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


Ramon Villamangca
Ramon Villamangca 2018년 11월 20일
편집: Ramon Villamangca 2018년 11월 20일
a simple single line solution:
>> num = 12345042117;
>> arrayfun(@(x) mod(floor(num/10^x),10),floor(log10(num)):-1:0)
ans =
1 2 3 4 5 0 4 2 1 1 7
  댓글 수: 3
Stephen23
Stephen23 2019년 1월 28일
편집: Stephen23 2022년 3월 25일
Ramon Villamangca
Ramon Villamangca 2023년 2월 27일
@Jyahway Dong: If the digits are that long, you'll probably input it as a char string, anyway. That means the solution would even be much simpler:
num = '62229893423380308135336276614282806444486645238749';
num - '0'
ans = 1×50
6 2 2 2 9 8 9 3 4 2 3 3 8 0 3 0 8 1 3 5 3 3 6 2 7 6 6 1 4 2

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

카테고리

Help CenterFile Exchange에서 Numeric Types에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by