How to get the last two digits of a number?

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

x=4974
y=floor((x/100-floor(x/100))*100)

3 Comments

+1 faster than mod
Comparison of the two methods
1000
rng(123)
x = round(rand(5000,1)*10000);
n = 10000;
t1 = tic;
cumulativeTime1 = nan(n,1);
for i = 1:n
v = floor((x/100-floor(x/100))*100);
cumulativeTime1(i) = toc(t1);
end
pause(1)
t2 = tic;
cumulativeTime2 = nan(n,1);
for i = 1:n
w = mod(x,100);
cumulativeTime2(i) = toc(t2);
end
duration1 = diff(cumulativeTime1);
duration2 = diff(cumulativeTime2);
figure
hold on
plot(duration1,'DisplayName','floor')
plot(duration2,'DisplayName','mod')
xlabel('Iteration')
ylabel('time (sec)')
legend()
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.
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)

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

Thank you very much. Just one more question: How would you extract the first two digits of those 4 digit integers?
Thanks a lot.
+1 I would have gone with mod, too.
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.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!