multiple digit number in to individual digits

115 views (last 30 days)
i want to change the number 1123 in 1 1 2 3, want to split combine number into into individual numbers

Accepted Answer

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

Sign in to comment.

More Answers (3)

John D'Errico
John D'Errico on 22 Jul 2014
N = 1123;
Ndigits = dec2base(N,10) - '0'
Ndigits =
1 1 2 3
  3 Comments
Michael Ramage
Michael Ramage on 28 Aug 2020
How to do this with a floating point number?
John D'Errico
John D'Errico on 27 Feb 2023
Edited: John D'Errico on 27 Feb 2023
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.

Sign in to comment.


Jan
Jan on 7 Feb 2017
Edited: Jan on 14 Feb 2017
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 Comments
Jay Doshi
Jay Doshi on 25 Mar 2022
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 on 25 Mar 2022
N = 6;
m = 3; % order
d = mod(floor(N ./ 10 .^ (m:-1:0)), 10)
d = 1×4
0 0 0 6

Sign in to comment.


Ramon Villamangca
Ramon Villamangca on 20 Nov 2018
Edited: Ramon Villamangca on 20 Nov 2018
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 Comments
Ramon Villamangca
Ramon Villamangca on 27 Feb 2023
@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

Sign in to comment.

Categories

Find more on Numeric Types in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!