http://www.stroustrup.com/Programming/PPP2code/std_lib_facilities.h
Chapter 9 // Exercise 14
Design and implement a Money class for calculations involving dollars and cents where arithmetic has to be accurate to the last cent using the 4/5 rounding rule (.5 of a cent rounds up; anything less than .5 rounds down). Represent a monetary amount as a number of cents in a long int, but input and output as dollars and cents, e.g., $123.45. Do not worry about amounts that don't fit into a long int.
main.cpp
My first attempt I felt I had not done it correctly as it seemed a little too simple. It was the rounding rule that got me. Where did we need the code to round? When converting dollars to cents you just multiply it by 100. Then divide it by 100 to convert it back to dollars. I'm guessing he means that if someone inputs $2.298 he wants that figure rounded to $2.30 then stored as cents in a long int. I created a simple rounding program as seen above. This does exactly what he specifies. I then re-jigged it into the class format below as we expand on it in the next few exercises.
main.cpp
moneyClass.h
moneyClass.cpp
A lot of people seem to go a bit crazy when it comes to rounding. The standard library provides a function called round() which generally adheres to the 4/5 rounding rule so there's no need to implement it yourself. Also, I used a float at first to store the currency however it came with some issues to I switched to a double to store the initial dollars in. I then just manipulated the output using cout functions to make them specific to certain decimal points.
main.cpp
//----------------------------------// // main.cpp //----------------------------------// //INCLUDES// #include <iostream> #include <iomanip> #include <conio.h> using namespace std; int main() { double cents, dollars; cout << "$"; cin >> dollars; cents = dollars * 100.0f; cents = round(cents); cout << "Dollars: $" << fixed << setprecision(2) << dollars << endl; cout << "Cents: " << fixed << setprecision(0) << cents << endl; system("pause"); return 0; }
My first attempt I felt I had not done it correctly as it seemed a little too simple. It was the rounding rule that got me. Where did we need the code to round? When converting dollars to cents you just multiply it by 100. Then divide it by 100 to convert it back to dollars. I'm guessing he means that if someone inputs $2.298 he wants that figure rounded to $2.30 then stored as cents in a long int. I created a simple rounding program as seen above. This does exactly what he specifies. I then re-jigged it into the class format below as we expand on it in the next few exercises.
main.cpp
//----------------------------------// // main.cpp //----------------------------------// //INCLUDES// #include "moneyClass.h" int main() { Money money; money.menu(); return 0; }
moneyClass.h
//----------------------------------// // moneyClass.h //----------------------------------// // for calculations involving dollars // and cents //----------------------------------// #ifndef _MONEYCLASS_H_ #define _MONEYCLASS_H_ //INCLUDES// #include <iostream> #include <iomanip> #include <conio.h> using namespace std; //----------------------------------// // CLASS: Money //----------------------------------// class Money { public: Money(); ~Money(); void menu(); private: void getInput(); void printDollars(); void convertToCents(); //variables// long int m_cents; double m_dollars; }; #endif // !_MONEYCLASS_H_
moneyClass.cpp
//----------------------------------// // moneyClass.cpp //----------------------------------// // for calculations involving dollars // and cents //----------------------------------// //INCLUDES// #include "moneyClass.h" Money::Money() {} Money::~Money() {} //main menu void Money::menu() { cout << "-----Money Class----" << endl; getInput(); convertToCents(); printDollars(); } //get input as $0.00 void Money::getInput() { double input; cout << "Please enter dollars: \n$"; cin >> input; m_dollars = input; } //convert dollars to cents void Money::convertToCents() { //100 cents == $1 m_cents = round(m_dollars * 100.0f); } //print output as dollars void Money::printDollars() { cout << "Dollars: $" << fixed << setprecision(2) << m_dollars << endl; cout << "Cents: " << fixed << setprecision(0) << m_cents << endl; //return to main menu system("pause"); system("CLS"); m_cents = m_dollars = 0; menu(); }
A lot of people seem to go a bit crazy when it comes to rounding. The standard library provides a function called round() which generally adheres to the 4/5 rounding rule so there's no need to implement it yourself. Also, I used a float at first to store the currency however it came with some issues to I switched to a double to store the initial dollars in. I then just manipulated the output using cout functions to make them specific to certain decimal points.
No comments:
Post a Comment