c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...
復制內容到剪貼板
代碼:#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;
}
總結
以上是生活随笔為你收集整理的c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux算法设计,嵌入式Linux平台
- 下一篇: 基于c语言单片机秒表课程设计,基于c语言