题目链接 Acwing 658
这个double类型的rest,本应该为1.01的,结果debug发现算出来是1.0099999(无限循环)。
之后我让rest自乘100,此时rest变成了100.99999
然后我想将rest赋值给一个int型的r,此时的r为100,而不是我想象中的101
问一下各位大佬:这种问题应该如何解决或者是如何避免呢?
非常感谢各位大佬愿意花费时间看我的问题。
问题代码:
#include<iostream>
using namespace std;
int main()
{
double n;
cin >> n;
int num = (int)n;
int a100 = num / 100;
num %= 100;
int a50 = num / 50;
num %= 50;
int a20 = num / 20;
num %= 20;
int a10 = num / 10;
num %= 10;
int a5 = num / 5;
num %= 5;
int a2 = num / 2;
num %= 2;
//为什么这里rest=1.009999999而不是1.01
double rest = n - a100 * 100 - a50 * 50 - a20 * 20 - a10 * 10 - a5 * 5 - a2 * 2;
cout << "NOTAS:" << endl;
cout << a100 << " moeda(s) de R$ 100.00" << endl;
cout << a50 << " moeda(s) de R$ 50.00" << endl;
cout << a20 << " moeda(s) de R$ 20.00" << endl;
cout << a10 << " moeda(s) de R$ 10.00" << endl;
cout << a5 << " moeda(s) de R$ 5.00" << endl;
cout << a2 << " moeda(s) de R$ 2.00" << endl;
rest *= 100; //rest = 100.999999999而不是101
cout << rest << endl;
int r = rest; //我这里想让r = 101的,因为前面rest = 1.0099999,导致这里r变成了100
cout << r;
cout << r / 100 << " moeda(s) de R$ 1.00" << endl;
r %= 100;
cout << r / 50 << " moeda(s) de R$ 0.50" << endl;
r %= 50;
cout << r / 25 << " moeda(s) de R$ 0.25" << endl;
r %= 25;
cout << r / 10 << " moeda(s) de R$ 0.10" << endl;
r %= 10;
cout << r / 5 << " moeda(s) de R$ 0.05" << endl;
r %= 5;
cout << r << " moeda(s) de R$ 0.01" << endl;
return 0;
}