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());
posted @   、有妖气  阅读(2208)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示