I have a function that uses fix and rem functions but if the entered number is big it does not give the right number.
2 views (last 30 days)
Show older comments
Adnan Fino
on 12 Dec 2021
Commented: Adnan Fino
on 13 Dec 2021
double d;
function denominationsCounter(d)
double d50;
double d20;
double d10;
double d5;
double d2;
double d1;
double d50p;
double d20p;
double d10;
double d5p;
double d2p;
double d1p;
d50 = fix(d/50);
d = rem(d,50);
d20 = fix(d/20);
d = rem(d,20);
d10 = fix(d/10);
d = rem(d,10);
d5 = fix(d/5);
d = rem(d,5);
d2 = fix(d/2);
d = rem(d,2);
d1 = fix(d/1);
d = rem(d,1);
d50p = fix(d/0.5);
d = rem(d,0.5);
d20p = fix(d/0.2);
d = rem(d,0.2);
d10p = fix(d/0.1);
d = rem(d,0.1);
d5p = fix(d/0.05);
d = rem(d,0.05);
d2p = fix(d/0.02);
d = rem(d,0.02);
d1p = fix(d/0.01);
d = rem(d,0.01);
disp("Number of Notes: 50:"+d50 +",20:"+ d20 +",10:"+d10+",5:"+d5)
disp("Number of Coins: 2:" +d2 + ",1:"+ d1 + ",50p:" +d50p + ",20p:" +d20p + ",10p:" +d10p + ",5p:" + d5p + ",2p:" +d2p+ ",1p:"+d1p)
disp(d)
This function will calculate the least number of denominations required for an entered amount
for example if I entered 9.33, it show this 10p:0,5p:0,2p:1,1p:1 which means that it will take 1 of 2p coins and 1 of 1p coins for the required amount. while if I entered 15.33 or 20.33 it will show 2p:1,1p:0. It will not add the 1p coin. If the reminder is 1 it is not showing 1p:1 it is showing as zero. Any ideas please to make it suitable for all numbers?
1 Comment
Walter Roberson
on 12 Dec 2021
Note: MATLAB does not use declarations of variables like that.
double d50;
would be interpreted as
double('d50');
which would look up the codes used to encode 'd' '5' '0' and convert those uint16 to double precision, and then throw away the result because of the semi-colon.
Accepted Answer
Walter Roberson
on 12 Dec 2021
function denominationsCounter(D)
F = 100;
d = round(D * F);
f = round(50*F);
d50 = fix(d/f);
d = rem(d,f);
f = round(20*F);
d20 = fix(d/f);
d = rem(d,f);
f = round(10*F);
d10 = fix(d/f);
d = rem(d,f);
f = round(5*F);
d5 = fix(d/f);
d = rem(d,f);
f = round(2*F);
d2 = fix(d/f);
d = rem(d,f);
f = round(1*F);
d1 = fix(d/f);
d = rem(d,f);
f = round(0.5*F);
d50p = fix(d/f);
d = rem(d,f);
f = round(0.2*F);
d20p = fix(d/f);
d = rem(d,f);
f = round(0.1*F);
d10p = fix(d/f);
d = rem(d,f);
f = round(0.05*F);
d5p = fix(d/f);
d = rem(d,f);
f = round(0.02*F);
d2p = fix(d/f);
d = rem(d,f);
f = round(0.01*F);
d1p = fix(d/f);
d = rem(d,f);
disp("Number of Notes: 50:"+d50 +",20:"+ d20 +",10:"+d10+",5:"+d5)
disp("Number of Coins: 2:" +d2 + ",1:"+ d1 + ",50p:" +d50p + ",20p:" +d20p + ",10p:" +d10p + ",5p:" + d5p + ",2p:" +d2p+ ",1p:"+d1p)
disp(d/F)
More Answers (1)
Voss
on 12 Dec 2021
In this case, since you know (presumably) that any number input into the program will be a multiple of 0.01 (i.e., no fractional cents/pence allowed), a solution is to round d to 2 decimal places each time it's calculated, e.g.:
d = round(rem(d,50),2); % and so on every time d is updated
Aternatively, you can redefine d to be in units of cents/pence rather than dollars/pounds/euros/whatever and then just round to the nearest integer.
3 Comments
See Also
Categories
Find more on Get Started with MuPAD 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!