const double ExtDecimalArray[9]={ 1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0 };
double NormalizeDouble(const double val,int digits) {
if(digits<0) digits=0;
if(digits>8) digits=8;
//----
const double p=ExtDecimalArray[digits];
return((val>=0.0) ? (double(__int64(val*p+0.5000001))/p) : (double(__int64(val*p-0.5000001))/p));
}
五舍六入,digits为精确到小数点后第几位。
const double ExtDecimalArray[9]={ 1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0 };
double NormalizeDouble(const double val,int digits) {
if(digits<0) digits=0;
if(digits>8) digits=8;
//----
const double p=ExtDecimalArray[digits];
return((val>=0.0) ? (double(__int64(val*p+0.4000001))/p) : (double(__int64(val*p-0.4000001))/p));
}
思路是,要保留n位,就先将值乘以10的n次方,加上0.5后取整,再除以10的n次方。
例如,1.23456要保留两位小数,乘以10的2次方后变成123.456,加上0.5后变成123.956,取整后变成123,然后除以100变成1.23