Filter löschen
Filter löschen

multiple digit number in to individual digits

49 Ansichten (letzte 30 Tage)
Raza
Raza am 22 Jul. 2014
Bearbeitet: John D'Errico am 27 Feb. 2023
i want to change the number 1123 in 1 1 2 3, want to split combine number into into individual numbers

Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 22 Jul. 2014
a=1234
b=str2double(regexp(num2str(a),'\d','match'))
  3 Kommentare
Walter Roberson
Walter Roberson am 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 am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

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

Melden Sie sich an, um zu kommentieren.


Jan
Jan am 7 Feb. 2017
Bearbeitet: Jan am 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 Kommentare
Jay Doshi
Jay Doshi am 25 Mär. 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 am 25 Mär. 2022
N = 6;
m = 3; % order
d = mod(floor(N ./ 10 .^ (m:-1:0)), 10)
d = 1×4
0 0 0 6

Melden Sie sich an, um zu kommentieren.


Ramon Villamangca
Ramon Villamangca am 20 Nov. 2018
Bearbeitet: Ramon Villamangca am 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 Kommentare
Stephen23
Stephen23 am 28 Jan. 2019
Bearbeitet: Stephen23 am 25 Mär. 2022
Ramon Villamangca
Ramon Villamangca am 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

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Numeric Types finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by