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

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条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 已结题 8月8日
      • 已采纳回答 8月8日
      • 创建了问题 8月8日

      悬赏问题

      • ¥15 实值特征权重向量和特征选择,多分类
      • ¥15 INVEST年产水量模块结果出处理
      • ¥15 Neo4j 不显示关系
      • ¥15 这段代码有什么bug
      • ¥15 pip默认安装位置修改不成功
      • ¥15 C++ inline、staitc、const三合一谁能讲通透
      • ¥15 关于pyqt5中QThread的问题
      • ¥20 STM32基于HAL库使用串口发送16进制数组
      • ¥15 OpenCV报错 You can enable it via 'OPENCV_IO_ENABLE_OPENEXR'
      • ¥15 AT89C51的程序问题