Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在减去cpp整数时丢失了一个数字 我正在通过一门C++课程,要求我用美元和美分分开制作一个简单的出纳程序。p>_C++_Data Structures - Fatal编程技术网

我在减去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;