将值0.6000002的C ++ float
变量截断为0.6000并将其存储回该变量的最简单方法是什么?
最佳答案
首先,重要的是要知道浮点数是近似的。请参阅@Greg Hewgill提供的链接,以了解为什么此问题不能完全解决。
但是,这里有一些可能会满足您需要的解决方案:
可能是更好的方法,但是效率较低:
char sz[64];
double lf = 0.600000002;
sprintf(sz, "%.4lf\n", lf); //sz contains 0.6000
double lf2 = atof(sz);
//lf == 0.600000002;
//lf2 == 0.6000
printf("%.4lf", lf2); //print 0.6000
更有效的方法,但可能不太精确:
double lf = 0.600000002;
int iSigned = lf > 0? 1: -1;
unsigned int uiTemp = (lf*pow(10, 4)) * iSigned; //Note I'm using unsigned int so that I can increase the precision of the truncate
lf = (((double)uiTemp)/pow(10,4) * iSigned);
关于c++ - 在C++中截断一个十进制值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13923055/