减去CPP整数时,我会丢失一个数字

I am losing a number when subtracting cpp integers

本文关键字:数字 一个 整数 CPP 减去      更新时间:2023-10-16

我正在通过C 课程,并被要求分别制作一个带有美元和美分的简单收银员计划。

这样做,我遇到了一个实例,如果我的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。我认为转换方面使这是一个非重复的问题

问题是change*100 - dollars*100double类型的浮点表达式。输出时,这将是圆形

但是,当将其分配给整数变量时,浮点值为截断,其中小数是简单地切掉的。因此,如果您有类似39.9的东西,将舍入40并将其截断为39

它与 decimal point precision有关。在cents = change * 100 - dollars * 100;的行中,由于结果转换为int,因此丢失了精度。但是在cout<<"cents: "<<change*100 - dollars*100<<endl;的行中,结果在double中,因此不会丢失精度。

您可以通过以下语句

对其进行验证
double cent2=change * 100 - dollars * 100;
cout<<cent2<<endl;
相关文章: