复制内容到剪贴板
代码:#include
using namespace std;
#define FLENGTH 1000; //宏定义保留3位小数
double fun(double ldBuf); //四舍六入五成双函数
int main(void)
{
double ldTemp=9.824963;
double ldRet;
//大于5
ldTemp=9.824963;
ldRet = fun(ldTemp);
printf("%.6lf ---- %.3lf\n",ldTemp,ldRet);
//小于5
ldTemp=9.824363;
ldRet = fun(ldTemp);
printf("%.6lf ---- %.3lf\n",ldTemp,ldRet);
//5后面跟偶数
ldTemp=9.824563;
ldRet = fun(ldTemp);
printf("%.6lf ---- %.3lf\n",ldTemp,ldRet);
//5后面跟奇数
ldTemp=9.824533;
ldRet = fun(ldTemp);
printf("%.6lf ---- %.3lf\n",ldTemp,ldRet);
printf("\n");
system("pause");
return 0;
}
/*
函数名称:fun
函数作用:实现四舍六入五成双
函数参数:
double ldBuf 需要进行四舍六入五成双加工的数值
函数返回值:
double 进行四舍六入五成双加工后的数值
*/
double fun(double ldBuf)
{
double ldRet;
char chBuf[20];
char chRet[20];
double ldTemp;
int nPos;
char chTemp;
//printf("*********************************\n");
ldTemp = ldBuf * FLENGTH; //保留小后3位,相当于先*1000
//printf("ldTemp --- %lf ; ldBuf ---- %lf \n",ldTemp,ldBuf);
//再根据小数点后的位数区别
sprintf(chBuf,"%lf",ldTemp); //转换成字符串进行处理
nPos = strcspn(chBuf,".");
//printf("chBuf --- %s\n",chBuf);
chTemp = chBuf[nPos+1]; //取小数点后的一位数
if ( chTemp
{
//小于5,舍去,取小数点前的数据
strncpy(chRet,chBuf,nPos);
ldRet = atof(chRet);
}
else
{
if(chTemp>'5')
{
//大于5,进位
strncpy(chRet,chBuf,nPos );
ldRet = atof(chRet) +1 ;
}
else
{
//等于5,按规则,根据5后面的一位进行判断
chTemp = chBuf[nPos+2];
if( (chTemp%2)==0)
{
//5后面跟的是偶数位,末位不变
strncpy(chRet,chBuf,nPos );
ldRet = atof(chRet);
}
else
{
//5后面跟的是奇数位,末位加1
strncpy(chRet,chBuf,nPos );
ldRet = atof(chRet) +1;
}
}
}
//printf("前面的%lf\n",ldRet);
ldRet = ldRet / FLENGTH;
//printf("后面的%lf\n",ldRet);
//printf("*********************************\n");
return ldRet;
}