首页 > 其他分享 >Qt-Qt QString toDouble 失败

Qt-Qt QString toDouble 失败

时间:2022-10-12 15:44:26浏览次数:50  
标签:ok Qt double 60 toDouble QString systemLocale

相关资料:

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”

搜索

复制

<iframe></iframe>

标签:ok,Qt,double,60,toDouble,QString,systemLocale
From: https://www.cnblogs.com/FKdelphi/p/16784739.html

相关文章

  • Qt5 使用CMake 添加QtResourceFile(qrc)资源文件和添加QT模块
    Qt:5.12.9添加资源文件CMakeLists.txt .....qt5_add_resources(qrc_FILESResourceFile.qrc)if(ANDROID)add_library(qtGUIDemo2CMake2SHAREDmain.cpp......
  • Qt实战:云曦日历篇
    Qt实战:云曦日历篇文章目录​​Qt实战:云曦日历篇​​​​前言​​​​一、云曦日历效果图​​​​1.返回今天:​​​​2.天气查询:​​​​3.天气刷新:​​​​4.日程管理:​......
  • Qt实战:云曦Convert篇
    Qt实战:云曦Convert篇文章目录​​Qt实战:云曦Convert篇​​​​前言​​​​一、云曦Convert效果图​​​​1.回到首页:​​​​2.选择拆分:​​​​3.平均拆分:​​​​4.......
  • qt dialog 弹出后背景变暗透明
    intwidth1=this->width();intheight1=this->height();QWidget*m_mask=newQWidget(this);m_mask->resize(width1,height1);m_mask->move......
  • qt 容器 函数指针
    private:typedefvoid(MainWindow::*pfunc)();QHash<QString,pfunc>func_map_enter;voidMainWindow::init_qmap(void){func_map_enter.insert("page_n......
  • Pyside或Pyqt的 QWebEngineView 载入html为空白的问题
    我想用Pyside6的QWebEngineView组件来载入一个本地的html网页,在解决了路径错误的问题后,使用load方法载入仍然是空白一片,最后改成读取文件,改用setHtml载入,终于能显示了示......
  • MQTT协议的消息保留标志位:RETAIN
    MQTT协议的消息保留标志位:RETAIN当消费者订阅某个topic后,不管生产者是否正在发布消息,消费者总能消费到该topic最后一条消息特别注意:MQTT服务器只会为每一个Topic保存......
  • 【原创】2022年linux环境下QT6不支持中文输入法解决方案
    1.配置环境exportPATH="~/目录/Qt/6.x.x/gcc_64/bin":$PATHexportPATH="~/目录/Qt/Tools/Cmake/bin":$PATH“目录”->自己的安装目录“6.x.x”->自己的版......
  • qt容器与常用算法
    容器这些容器的使用方式和stl学的基本结构,使用方式是一样只要是数据就要使用容器,程序中的数据放在容器中方便增删改查。Qt库提供了一组通用的基于模板的容器类(contain......
  • MQTT
    MQTT本资料来自互联网总结MQTT中文网MQTT中文手册MQTT介绍MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输协议)MQTT(MessageQueuingTelemetryTrans......