#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即可。
注:浮点数不能用 == !=等进行比较,可以在在精度范围内进行比较
相关链接:
https://blog.csdn.net/unknowm/article/details/2906938
https://www.cnblogs.com/ErosLii/p/4437938.html