输入一个浮点数,因为要用到小数部分,所以我把double强转为了int类型,然后用原浮点数减去强转之后的int类型数得到了小数部分,把小数部分乘了100把它变为了整数以便后续使用。
其它一切良好,就是不知道结果中为什么小数部分的个位数计算出来的结果不对,比如图中的464.02,应该有两张0.1元的钞票,但是最后结果却只有一张,别的数关于个位也不对,于是我就用vstudio试了一下,提醒我强转可能会精度缺失,有人能讲一下原理吗,浮点数转化为整数不应该直接舍弃小数部分吗,怎么最后得到的小数钞票部分结果少1?
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
double n;
int n1;
scanf("%lf",&n);
printf("NOTAS:\n");
n1=(n-(int)n)*100;
printf("%d nota(s) de R$ 100.00\n",(int)n/100);
n=(int)n%100;
printf("%d nota(s) de R$ 50.00\n",(int)n/50);
n=(int)n%50;
printf("%d nota(s) de R$ 20.00\n",(int)n/20);
n=(int)n%20;
printf("%d nota(s) de R$ 10.00\n",(int)n/10);
n=(int)n%10;
printf("%d nota(s) de R$ 5.00\n",(int)n/5);
n=(int)n%5;
printf("%d nota(s) de R$ 2.00\n",(int)n/2);
n=(int)n%2;
printf("MOEDAS:\n");
printf("%d moeda(s) de R$ 1.00\n",(int)n);
printf("%d moeda(s) de R$ 0.50\n",n1/50);
n1=n1%50;
printf("%d moeda(s) de R$ 0.25\n",n1/25);
n1=n1%25;
printf("%d moeda(s) de R$ 0.10\n",n1/10);
n1=n1%10;
printf("%d moeda(s) de R$ 0.05\n",n1/5);
n1=n1%5;
printf("%d moeda(s) de R$ 0.01\n",n1/1);
}