自定义算法实现按精度去4舍5入处理double的数据

来源:互联网 发布:序列比对软件 编辑:程序博客网 时间:2024/05/16 13:47

主要思想是把原来的double数据扩大到精度位数的值,然后加上0.5,得到四舍五入的数据,、最后再缩小回按精度位处理的数据。

代码实现如下:

double Power(int iBase, int iPower){double dRet = 1.0;for(int i = 0; i < iPower; i++){dRet *= iBase;}return dRet;}double DealDoublePrecision(double dVal, int iPrecision){return (__int64)(dVal * Power(10, iPrecision) + 0.5) / Power(10, iPrecision);}

调用时:

double dVal = 12.890765006;dVal = test.DoublePrecisionDeal(dVal, 4);

精度为4时输出12.8908;

精度为2时输出12.89;

精度为5时输出12.89077;


还有一种方法,用sprintf和sscanf实现

double DoubleRound(double dValue, unsigned int nPrecision){char szValue[20] = {0};double dRetVal = 0.0;sprintf(szValue, "%.*lf", nPrecision, dValue);sscanf(szValue, "%lf", &dRetVal);return dRetVal;}


还有一种是用输入输出流的方式:

#include <iostream>#include <sstream>#include <iomanip>double DoubleRoundFunction(double dVal, int iPrecision){std::stringstream ss;ss << std::fixed << std::setprecision(iPrecision) << dVal;ss >> dVal;return dVal;}






阅读全文
0 0
原创粉丝点击