我正在通过一门C++课程,并被要求分别制作一个带有美元和美分变化的简单收银程序。我在减去cpp整数时丢失了一个数字
这样做,我遇到了一个例子,如果我cout
我的cout<<change*100 - dollars*100<<endl;
的计算正确得到40美分。
但是,当我设置INT cents = change * 100 - dollars * 100;
然后cout<<cents<<endl;
我得到39
这是因为我使用有一个我不知道的一些意想不到的后果中的数据类型?这里是整个程序:
#include <iostream>
using namespace std;
int main()
{
double price, paymentAmount, change;
int dollars, cents;
price = 23.00;
paymentAmount = 24.40;
cout<<"total: "<<price<<endl;
cout<<"paid: "<<paymentAmount<<endl;
change = paymentAmount-price;
dollars = change; // implicit conversion from double -> int
cents = change * 100 - dollars * 100;
cout<<"dollars: "<<dollars<<endl;
cout<<"cents: "<<change*100 - dollars*100<<endl; // outputs 40
cout<<"cents: "<<cents<<endl; // outputs 39
return 0;
}
感谢您的帮助
编辑:
原来这是来自转换双为int,其截断小数。我的号码是39.99999,但在转换为int时被截断为39。我认为转换方面使得这是一个非重复问题
的[是浮点运算坏了吗?(可能的复制https://stackoverflow.com/questions/588004/is-floating-point-math-broken验证) –
为了将来的参考,在处理金钱时不要使用标准浮点类型和算术运算。简单的初学者练习可能就足够了,但一旦你成为初学者,就不要这样做。 –
将货币保存为整数/长整数的长整数,以避免信息丢失,这是由于浮点格式使用大数字或周期性分(由于1/10或1/100无法准确存储在二进制firmat中)所造成的。 – cmdLP