实际生产中,遇到这样的问题, 我需要的数据是:1.500,然而得到的是 1.49999999999 或者 1.5000003 ,类似这样的情况,我在之前的文章中也提到过,提出的解决方案不够完美。 今天重提旧事,再次解决。
上代码:
/**
* @brief: 数据求精度
* @param: IN double dSrc : 待求精度数
* @param: IN int iBits: 保留几位小数, 0 - 不保留小数, 1 - 保留1位小数, 2 - 保留2位小数
* return: double
* 返回计算精度计算结果
*/
double HTool::RoundBase(IN double dSrc, IN int iBits)
{
// 1、若 参数 【iBits】 不正确
if (0 > iBits)
{
return 0;
}
// 2、参数正确,执行计算
// 计算得到的结果
double retVal = 0;
// 中间变量
int intTmp = 0;
// 3、 若 dsrc 小于零
if (0 > dSrc)
{
// 3.1 转为正数
dSrc *= -1;
intTmp = (int)((dSrc + 0.5 / pow(10.0, iBits)) * pow(10.0, iBits));
retVal = ((double)intTmp) / pow(10.0, iBits);
// 3.2 还原负数
retVal *= -1;