How to get the last two digits of a number?

60 views (last 30 days)
Hello,
I have a table with 505 rows and 1 column. Each row contains a 4 digit number and from of these numbers I would like to extract the last two digits to add a second column to that table containing the last two digits of every number in the first column.
I would be grateful for any hints. Thank you

Accepted Answer

David Fletcher
David Fletcher on 10 May 2021
x=4974
y=floor((x/100-floor(x/100))*100)
  3 Comments
Felician Putz
Felician Putz on 22 Jan 2022
Be careful with floor. This can give the wrong result for some numbers. Counter example: 1001, whose result is 0 for me because apparently floor(1.0000) is 0 for Matlab.
Image Analyst
Image Analyst on 22 Jan 2022
floor(1.0000)
ans = 1
x = 1001;
v = floor((x/100-floor(x/100))*100)
v = 0
fprintf('%.32f', (x/100-floor(x/100))*100) % This is not 1
0.99999999999997868371792719699442

Sign in to comment.

More Answers (1)

DGM
DGM on 10 May 2021
Assuming they're integers:
% 10 rows random integers
n = (randi(8999,1,10)+1000)'
n = [n mod(n,100)]
If they aren't integers, you should decide how you want to round them first.
  3 Comments
Adam Danz
Adam Danz on 10 May 2021
+1 I would have gone with mod, too.
Adam Danz
Adam Danz on 10 May 2021
Either of the two existing solutions will work with 4-digit integers but note that if the 3rd digit is a 0 as in 4206, the extraction will be 6 and not 06 since matlab does not preserve the 0 place holder. If you want to retain the 0, you'll need to extract the digis as strings or character vectors.
Method 1: convert to string after extraction
rng(123) % for reprodicibility
x = round(rand(10,1)*10000);
lastTwo = mod(x,100);
charVec = compose('%02d',lastTwo); % for char-vectors
str = string(compose('%02d',mod(x,100))); % for string array
T = table(x, lastTwo, charVec, str)
T = 10×4 table
x lastTwo charVec str ____ _______ _______ ____ 6965 65 {'65'} "65" 2861 61 {'61'} "61" 2269 69 {'69'} "69" 5513 13 {'13'} "13" 7195 95 {'95'} "95" 4231 31 {'31'} "31" 9808 8 {'08'} "08" 6848 48 {'48'} "48" 4809 9 {'09'} "09" 3921 21 {'21'} "21"
Method 2: convert to string and then extract
rng(123) % for reprodicibility
x = round(rand(10,1)*10000);
xstr = string(x);
str = extractAfter(xstr,2);
T = table(x, lastTwo, str)
T = 10×3 table
x lastTwo str ____ _______ ____ 6965 65 "65" 2861 61 "61" 2269 69 "69" 5513 13 "13" 7195 95 "95" 4231 31 "31" 9808 8 "08" 6848 48 "48" 4809 9 "09" 3921 21 "21"

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!