[Qt] 使用arg()从double转换到QString的Bug?

    使用Qt的tr("%1").arg(...)转换double到QString会出错,起初以为是内存越界,但是后来用sprintf转换的结果跟它的结果比较,据此判断应该是Qt的Bug。

    有没有朋友也遇到这样的情况呢? 我的开发环境为vs2005 + Qt-vs-addin,使用Qt4.5.2 和Qt4.8.4都有这样的问题。


代码片段:

	char buffer[100] = {0};
	QString qsTurnoverVol;

	qsTurnoverVol = tr("%1").arg(price.TurnoverVol, 0, 'f', 0);
	sData += tr("%1,").arg(qsTurnoverVol);

	//test bug
	{
		sprintf(buffer, "%.0f", price.TurnoverVol);
		QString sBuffer(buffer);
		if (qsTurnoverVol != sBuffer)
		{
			QString sInfo = QString("'%1' vs '%2'").arg(qsTurnoverVol).arg(sBuffer);
			static int times = 5;
			if (times-- > 0)
				MessageBox(0, sInfo.toStdWString().c_str(), TEXT("出错啦"), MB_OK);
		}
	}


对话框输出:
'2590:'  vs '25910'

'2600:'  vs '26010'




-------------------------------------------------------------------------------------------------------
出错的double值,使用memcpy强制转换成两个unsigned long,取值见下面逗号分隔符字符串的前两个字段:


0,1087995776,'2610:' vs '26110'
0,1088532032,'3620:' vs '36210'
0,1088685632,'4100:' vs '41010'
0,1088692032,'4120:' vs '41210'
0,1089092032,'5370:' vs '53710'
0,1089165632,'5600:' vs '56010'
0,1089841248,'8870:' vs '88710'
0,1090276448,'11590:' vs '115910'
0,1090359648,'12110:' vs '121110'


转换代码:
double d;
unsigned long longArray[2] = {0, 1087995776};
memcpy(&d, longArray, sizeof(d));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

piaopiaolanghua

感谢鼓励,再接再厉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值