忧默的小男孩 2022-08-08 01:58 采纳率: 94.4%
浏览 106
已结题

double转int的精度损失问题?

输入一个浮点数,因为要用到小数部分,所以我把double强转为了int类型,然后用原浮点数减去强转之后的int类型数得到了小数部分,把小数部分乘了100把它变为了整数以便后续使用。
其它一切良好,就是不知道结果中为什么小数部分的个位数计算出来的结果不对,比如图中的464.02,应该有两张0.1元的钞票,但是最后结果却只有一张,别的数关于个位也不对,于是我就用vstudio试了一下,提醒我强转可能会精度缺失,有人能讲一下原理吗,浮点数转化为整数不应该直接舍弃小数部分吗,怎么最后得到的小数钞票部分结果少1?

img

img

img

img

img

img


#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);
    
}
  • 写回答

5条回答 默认 最新

查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月8日
  • 已采纳回答 8月8日
  • 创建了问题 8月8日

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?