截断C中的十进制值

将具有值0.6000002的C浮点变量截断为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#-------浮点数据类型


下一篇:Java的BigDecimal是与C#的Decimal相对应的最接近的数据类型吗?