我在减去cpp整数时丢失了一个数字 我正在通过一门C++课程,要求我用美元和美分分开制作一个简单的出纳程序。p>
在这样做的过程中,我遇到了一个例子,如果我我在减去cpp整数时丢失了一个数字 我正在通过一门C++课程,要求我用美元和美分分开制作一个简单的出纳程序。p>,c++,data-structures,C++,Data Structures,在这样做的过程中,我遇到了一个例子,如果我cout我对cout的计算,问题是change*100-double*100是double类型的浮点表达式。当您输出它时,它将被舍入 但当您将其分配给整型变量时,浮点值会被截断,小数只会被切掉。因此,如果您有类似于39.9的内容,它将四舍五入到40,并截断为39,那么问题在于change*100-dollars*100是一个类型为double的浮点表达式。当您输出它时,它将被舍入 但当您将其分配给整型变量时,浮点值会被截断,小数只会被切掉。因此,如果您有
cout
我对cout的计算,问题是change*100-double*100
是double
类型的浮点表达式。当您输出它时,它将被舍入
但当您将其分配给整型变量时,浮点值会被截断,小数只会被切掉。因此,如果您有类似于39.9
的内容,它将四舍五入到40
,并截断为39
,那么问题在于change*100-dollars*100
是一个类型为double
的浮点表达式。当您输出它时,它将被舍入
但当您将其分配给整型变量时,浮点值会被截断,小数只会被切掉。因此,如果您有类似于39.9
的东西,它将四舍五入到40
,并截断到39
,它与小数点精度有关。行内cents=零钱*100-美元*100代码>精度丢失,因为结果转换为int
。但在直线cout中,它与小数点精度有关。行内cents=零钱*100-美元*100代码>精度丢失,因为结果转换为int
。但为了便于将来参考,请不要在处理货币时使用标准的浮点类型和算术。对于一个简单的初学者来说,这可能就足够了,但一旦你不再是一个初学者,就不要这样做。将货币以整数/长的形式保存为美分,以避免由于使用大数字或周期美分的浮点格式而导致的信息丢失(因为1/10或1/100不能准确地存储在二进制firmat中).我不认为这是重复的,因为问题是由于转换为int,导致截断而不是舍入可能的重复,以供将来参考。在处理货币时,切勿使用标准浮点类型和算术。对于一个简单的初学者来说,这可能就足够了,但一旦你不再是一个初学者,就不要这样做。将货币以整数/长的形式保存为美分,以避免由于使用大数字或周期美分的浮点格式而导致的信息丢失(因为1/10或1/100不能准确地存储在二进制firmat中).我不认为这是重复的,因为问题是由于转换为int,导致截断而不是舍入。我认为这对初学者来说是一个更清晰的答案,因为它突出了舍入与舍入。我认为这对初学者来说是一个更清晰的答案,因为它突出了舍入与舍入
#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;
}
double cent2=change * 100 - dollars * 100;
cout<<cent2<<endl;