• string转double后,因为精度问题的解决方法


    常见问题:string转double后,因为精度问题,导致对double进行四舍五入的时候不精确的问题,找到一个比较好的方法。方法见FormatDecimal。调用示例见最底部。

    错误方法:string (“442477.876106195”)=> double(442477.87610619498)=> 保留8位小数结果为 (442477.87610619),实际结果应该为(442477.87610620)
    正确方法:string (“442477.876106195”)=> double(442477.87610619498)=> FormatDecimal方法处理后结果为(442477.87610619998)=> 保留8位小数结果为(442477.87610620
     
     
     
    /*
    * 函数名称: FormatDecimal
    * 函数功能: 提高double四舍五入前数据的精度
    * 参    数:
    * dblValue   原始double数据
    * nDecimal  四舍五入的位数
    * 返 回 值: 四舍五入前的double数据
    * 示    例: FormatDecimal(442477.87610619498, 8)=442477.87610619998
    */
    double FormatDecimal(double dblValue, int nDecimal)
    {
    double dRetval;
    double dMod = 0.0000001;
    if (dblValue < 0.0) dMod = -0.0000001;
    dRetval = dblValue;
    dRetval += (5.0 / pow(10.0, nDecimal + 1.0));
    dRetval *= pow(10.0, nDecimal);
    dRetval = floor(dRetval + dMod);
    dRetval /= pow(10.0, nDecimal);
    return(dRetval);
    }

     
     
    调用示例:
    fReturn = _tstof(strReturn.c_str());
    fReturn = FormatDecimal(fReturn, iDotnum);
    std::stringstream buffer;
    buffer << std::fixed << std::setprecision(iDotnum) << fReturn;
    strReturn.assign(buffer.str());
  • 相关阅读:
    Python 学习---------Day2
    算法入门笔记------------Day2
    Python 学习---------Day1
    算法入门笔记------------Day1
    从零系列--开发npm包(一)
    webpack2.0+ vue2.0
    gulp + angular + requirejs 简单学习
    MAC node + git + bower 简单安装
    通过docker image repository 获取docker imges id 并删除
    docker 安装vim
  • 原文地址:https://www.cnblogs.com/youyaoqi/p/16173727.html
Copyright © 2020-2023  润新知