Qt:QString 转float问题

只爱玩青玉德 2015-10-26 06:31:31
如题:比如
QString qStr = "1.08";
float ff = qStr.toFloat();
最后ff的结果是1.08000004,总是这样,我想要的只是1.08
而且如果转0.08,最后总是变成0.79999999,这样子的,有什么办法就是原来是多少就转多少啊,求教。
...全文
1477 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-10-27
  • 打赏
  • 举报
回复 1
//Round(1.234,2) = 1.23
//Round(1.234,0) = 1.0
//Round(123.4,-1) = 120.0
double Round(double dVal, short iPlaces) {
    double dRetval;
    double dMod = 0.0000001;
    if (dVal<0.0) dMod=-0.0000001;
    dRetval=dVal;
    dRetval+=(5.0/pow(10.0,iPlaces+1.0));
    dRetval*=pow(10.0,iPlaces);
    dRetval=floor(dRetval+dMod);
    dRetval/=pow(10.0,iPlaces);
    return(dRetval);
}

double round(double dVal, short iPlaces) //iPlaces>=0
{
    unsigned char s[20];
    double dRetval;

    sprintf(s,"%.*lf",iPlaces,dVal);
    sscanf(s,"%lf",&dRetval);
    return (dRetval);
}
paschen 2015-10-26
  • 打赏
  • 举报
回复

double round(double d, unsigned p)
{
	if(d==0)
		return 0;
	double n=1;
	for(;p>0;p--)
		n*=10;
	if(d>0.0)
		if(d-(__int64)(d*n)/n>=5)
			return (__int64)(d*n+0.5) / n;
		else
			return (__int64)(d*n+0.5000001) / n;
	else
		if(d-(__int64)(d*n)/n>=5)
			return (__int64)(d*n-0.5) / n;
		else
			return (__int64)(d*n-0.5000001) / n;
}
参数d为原浮点数,p为精确到小数点后的位数
只爱玩青玉德 2015-10-26
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
很多浮点数用二进制本身就没办精确表示 不信楼主试下:float a = 0.1f; 判断两浮点数是否相等或不等,应该判断其相减绝对值是否小于某个很小的正数 如果需要更高精度,可以使用double和long doulbe,这样误差会更小
好吧, 那现在截取小数点后两位应该怎么写呢
paschen 2015-10-26
  • 打赏
  • 举报
回复
很多浮点数用二进制本身就没办精确表示 不信楼主试下:float a = 0.1f; 判断两浮点数是否相等或不等,应该判断其相减绝对值是否小于某个很小的正数 如果需要更高精度,可以使用double和long doulbe,这样误差会更小

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧