Qt QString toDouble 失败

本文探讨了在欧洲语言环境下Qt框架中遇到的数值转换错误,并提供了两种解决方案:一是通过QLocale处理本地语言环境,二是直接采用英文环境进行转换。同时介绍了如何将double类型的数据转换为符合特定语言环境的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值