减去CPP整数时,我会丢失一个数字
I am losing a number when subtracting cpp integers
我正在通过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*100
是double
类型的浮点表达式。输出时,这将是圆形。
但是,当将其分配给整数变量时,浮点值为截断,其中小数是简单地切掉的。因此,如果您有类似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;
相关文章:
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何获取一个数字的前3位
- 我想做一个彼此不同但重复出现的数字
- 如何检查一个c++字符串中有多少相同的字符/数字
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- CIN 仅在输入非数字值时跳过下一个 CIN
- 以C++输出一个数字三角形
- 形成一个斐波那契三角形,使得每个数字是上面左对角线或右对角线上两个数字的总和
- 为什么当我输入一个被接受的数字时,我的 do-while 循环没有中断?
- 一个C++程序,用于在输入位数时输出具有特定位数的 .txt 文件中的所有数字
- 在C++中编程,将 3 个数字发送到一个函数,然后计算这 3 个数字的平均函数
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 找到 x^n 的所有组合,并检查它们的总和是否等于一个不包括相同数字的数字
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- 将数字提高到一个巨大的指数
- 反转一个数字程序不起作用,为什么?
- 使用带有一个参数函数的递归找到数字的平方
- 为什么当我输入一个大数字时,输出会一遍又一遍地重复?
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作