请教关于浮点数格式强制的问题
做了一个报表,报表中的数据是用C脚本完成的,脚本如下
SetTagFloatWait("tagA",GetTagFloatWait("A"));
SetTagFloatWait("tagB",GetTagFloatWait("B"));
SetTagFloatWait("tagC",GetTagFloatWait("B")-GetTagFloatWait("C"));
报表出来后很混乱,比如 值tagA是 0.65,值tagB是0.65 在报表中值B显示的是 0.64999999。 "B" 减去 "A "显示的"tagC"的值 是-1.192093E-07 。主要是小数位的问题。
请教用什么指令将变量的值限制他的小数位后赋值给另一个变量?谢谢!不是用printf指令。
[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。
仅供参考:
//Round(1.234,2) = 1.23
//Round(1.234,0) = 1.0
//Round(123.4,-1) = 120.0
double Round(double dVal, short iPlaces) {
double dRetval;
double dMod = 0.0000001;
if (dVal<0.0) dMod=-0.0000001;
dRetval=dVal;
dRetval+=(5.0/pow(10.0,iPlaces+1.0));
dRetval*=pow(10.0,iPlaces);
dRetval=floor(dRetval+dMod);
dRetval/=pow(10.0,iPlaces);
return(dRetval);
}
double round(double dVal, short iPlaces) //iPlaces>=0
{
unsigned char s[20];
double dRetval;
sprintf(s,"%.*lf",iPlaces,dVal);
sscanf(s,"%lf",&dRetval);
return (dRetval);
}