Leo 恒 2022-03-19 17:04 采纳率: 50%
浏览 18
已结题

可能和C++类型转换有关的问题

问题遇到的现象和发生背景

偶然在项目中遇到的bug, 查了半天发现是下面这个问题引起的:

问题相关代码,请勿粘贴截图
#include <iostream>

using namespace std;

int main()
{   
    double b = 0.1;

    double a = 3.5;
    int c = a/b;
    cout << "a: " << a << endl;
    cout << "b: " << b << endl;
    cout << "a/b: " << c << endl;

    double f = 0.7/0.2;
    int h = f/b;
    cout << "f: " << f << endl;
    cout << "b: " << b << endl;
    cout << "f/b: " << h << endl; 

    printf("a: %.10f\n", a);
    printf("f: %.10f\n", f);

    if(f == a){
        cout << "f == a" << endl;
    }
    return 0;
}

运行结果及报错内容

运行结果如下:
a: 3.5
b: 0.1
a/b: 35
f: 3.5
b: 0.1
f/b: 34
a: 3.5000000000
f: 3.5000000000

我的解答思路和尝试过的方法

为什么3.5/0.1 有时候是35 有时候是 34 呢?

我想要达到的结果
  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2022-03-19 17:06
    关注

    这个有误差啊
    有时候是34.9999998
    有时候是35.0000001
    int h = f/b;相当于对结果进行强制取整 ,使用的是截尾法 ,34.9999998也会变为34
    要想一样,你得用四舍五入
    int h = f/b+0.5
    这样都是35了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)