I have wrote a class to calculate the amount of money for me. Below is the code in brief.
class RMB
{
private:
int yuan;
int jiao;
int fen;
bool mark;
public:
RMB(int yu, int ji, int fe, bool mar = true)
{
yuan = yu;
jiao = ji;
fen = fe;
mark = mar;
}
RMB(double money)
{
int money1 = int(money * 100);
yuan = money1 / 100;
fen = money1 % 10;
jiao = (money1 - yuan * 100 - fen)/10;
if (money < 0) mark = 0;
else mark = 1;
}
operator double()
{
double money = yuan + double(jiao) / 10 + double(fen) / 100;
if (mark == false) return -money;
return money;
}
};
int main()
{
RMB a(1,2,3);RMB b(2,3,4);
cout << "a + c = " << RMB(a + c) << endl;//assume I have override "<<" and ">>"
cout << "a - b = " << RMB(a - b) << endl;
}
But when I test my code,it happened that:
a + c = 2 yuan 4 jiao 5 fen
a - b = -1 yuan -1 jiao 0 fen
I test it in VS2015,I have debugged it, and I see exact value of double(a-b)
is -1.199999998. So how can I fix this bug and what can I do to avoid bug like this kind?