读书人

数值修约有关问题大家帮忙看看

发布时间: 2012-08-11 20:50:30 作者: rapoo

数值修约问题,大家帮忙看看
※数据修约规则:保留位右边的数字对保留位数字1来说,若大于0.5,保留位加1;若小于0.5,保留位不变;
若等于0.5,保留位是偶数时不变,是奇数时保留位加1.

[code=C/C++][/code] else//角差
{
fSpace=fJiaoCha;
double fR=fAvg/fSpace;
int nMantissa;
int nfRZ;
int nfRX; //添加

String *strfR=fR.ToString();
//包含小数位
if(strfR->IndexOf(".")>0)
{
int i=strfR->IndexOf(".");
int l=strfR->Length-1;
nfRZ=Convert::ToInt32(strfR->Substring(0,i));
nfRX=Convert::ToInt32(strfR->Substring(i+1,1));

//整数位偶数
if(nfRZ%2==0)
{
//小数位判断
if(nfRX<=5)
{
fRound1=(int(nfRZ)+nMantissa)*fSpace;
}
else
{
fRound1=(int(nfRZ+1)+nMantissa)*fSpace;
}
}
else
{
if(nfRX<5)
{
fRound1=(int(nfRZ)+nMantissa)*fSpace;
}
else
{
fRound1=(int(nfRZ+1)+nMantissa)*fSpace;
}

//fRound1=(int(nfRZ)+nMantissa)*fSpace;
}

}
else//不包含小数位
{
fRound1=(Convert::ToInt32(strfR)+nMantissa)*fSpace;
}

}
double fRound=fRound1;



上面是小数点后1位是否为5,如果为5且小数点前的值为偶数,则化整保留整数位不变;如果为5且小数点前的值为奇数,则化整值加1。
例:(1)14.500
1、14为偶数; 2、小数点后为500,小数点后一位为5; 3、化整为14

(2)15.500
1、15为奇数; 2、小数点后为500,小数点后一位为5; 3、化整为16


我的需求是:小数点后3位=500时,且整数值为偶数时,化整值不变;(例:14.500=14)
小数点后3位>500时,整数值不管奇数偶数,化整值都加1;(例:14.501=15)
最顶端的代码的只判断了小数点后一位,所以导致14.501也化整为14。

大家帮帮忙~

[解决办法]
楼主想得太复杂了,参考下面的代码:

C/C++ code
#include <stdio.h>#include <math.h>int main(){    double number = 0.0;    int integer_part = 0;    int new_number = 0;    while(1)    {        scanf("%lf", &number);        if(number == 0.0) break;        // enter 0 to quit.        integer_part = floor(number);        if(integer_part % 2 == 0)        {            new_number = number + 0.499;        }        else        {            new_number = number + 0.5;        }        printf("%d\n", new_number);    }    return 0;}
[解决办法]
楼上的代码V5啊

读书人网 >C++

热点推荐