Qt-Qt QString toDouble 失败
相关资料:
https://blog.csdn.net/Time2017/article/details/126900752
1、问题:
欧洲语言的操作系统中,调用QLineEdit.Text().toDouble(),产生错误;
例如:“50,000”转为double后,结果是0;
2、原因一:德国等欧洲国家,小数点是用逗号表达,千分隔号用小数点表示:
如中文的“60000.123”,德语则显示为“60.000,123”
https://docs.oracle.com/cd/E19253-01/819-0402/overview-48/index.html
如下图,内部设置的是“60.00”,但QLineEdit.Text()获得的是“60,00”
3、原因二:QString.toDouble内部采用的是英文解析,导致“60,00”转double时变为0;
//QLocaleData::c()代表使用英文系统解析
double QString::toDouble(bool *ok) const
{
return QLocaleData::c()->stringToDouble(*this, ok, QLocale::RejectGroupSeparator);
}
二、正确做法:
1、QString转double,
1-1、考虑本地语言环境的方式:
auto systemLocale = QLocale::system();
bool ok;
double d = systemLocale.toDouble("60,000",&ok);
if(ok)
{
//转换成功
}
1-2、仅考虑英文语言环境的方式:
//转换失败
bool ok;
QString strTmp = "60,000";
double tmpD = strTmp.toDouble(&ok);//double为0,ok为false
2、double转QString:
2-1、转为本地语言环境的字符串
auto systemLocale = QLocale::system();//Italian
auto systemLanguage = systemLocale.language();
QString d = systemLocale.toString(600000.123,'f',4);//输出“600.000,1230”
2-2、转为英文环境的字符串
QString str1 = QString("%1").arg(600000.123 , 0 , 'f' , 4);//输出“600000.1230”
std::string str2 = SDStringUtils::StdStringFormat("%.3f",600000.123);//输出“600000.123”
欢迎关注我,一起进步!扫描下方二维码即可加我


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2016-10-12 Android问题-新电脑新系统WIN764位上安装简版本的XE8提示“Unit not found: 'System'”
2016-10-12 启动程序的同时传参给接收程序(XE8+WIN764)