关于浮点数转整数不准确问题

#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <iostream>


using namespace std;

int main(int argc, char **argv) 
{
    double dNUM = 1.001;
    double dNUMTmp = dNUM * 1000;
    unsigned int iNUMTmp = (unsigned int)dNUMTmp;
    cout << "dNUM : "<< to_string(dNUM) << endl;
    cout << "dNUMTmp : "<< to_string(dNUMTmp) << endl;
    cout << "iNUMTmp : "<< to_string(iNUMTmp) << endl;
    cout << "dNUMTmp - iNUMTmp : "<< to_string(dNUMTmp - iNUMTmp) << endl;
    cout << "abs(dNUMTmp - iNUMTmp) : "<< to_string(abs(dNUMTmp - iNUMTmp)) << endl;

    if (abs(dNUMTmp - iNUMTmp) != 0.0)
    {
        cout << "dNUMTmp != iNUMTmp" << endl;
    } else 
    {
        cout << "dNUMTmp == iNUMTmp" << endl;
    }
    return 0;
}

实际运行时,会发现转换为整数后,两者实际是不相等的,此时整数为1000,浮点数为1001.。笔者怀疑是由于浮点数转换掉用函数_ftol2导致的。

此时在转换时,向上取整ceil或者四舍五入round即可。

注:浮点数不能用 ==  !=等进行比较,可以在在精度范围内进行比较

相关链接:

在C++中将浮点数强制转换为整数,做了些什么——ftol注释_c++ 浮点转整型-CSDN博客

浮点数比较问题(float x 与 '零值'比较) - ErosLii - 博客园 (cnblogs.com)

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值