数值修约问题,大家帮忙看看
※数据修约规则:保留位右边的数字对保留位数字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啊