从Qt5中的std::stod()和QString::toDouble()获取不同的值 我启动了一个QT项目,并与它连接了一些C++代码,我用来解析文件。此代码使用STD:STODE()来解析双值,并且在普通C++项目中工作良好,但是当与QT应用程序一起使用时,STD::STODE()只返回整数的一部分。

从Qt5中的std::stod()和QString::toDouble()获取不同的值 我启动了一个QT项目,并与它连接了一些C++代码,我用来解析文件。此代码使用STD:STODE()来解析双值,并且在普通C++项目中工作良好,但是当与QT应用程序一起使用时,STD::STODE()只返回整数的一部分。,qt,c++11,floating-point,double,Qt,C++11,Floating Point,Double,我编写并运行了一些测试代码,一个用g++6.1编译,另一个用qmake 5.6和相同的g++。结果与我的项目结果相同 用g++编译的代码: #包括 int main(int argc,字符**argv) { 常量标准::字符串编号(“3.14”); 双dbl=std::stod(数字); std::cout因为std::stod已经无法修复,应该在地狱中燃烧,它是按照std::strtod实现的,它根据当前语言环境解释双精度。QString总是使用C语言环境(使用QLocale进行特定于语言环境

我编写并运行了一些测试代码,一个用g++6.1编译,另一个用qmake 5.6和相同的g++。结果与我的项目结果相同

用g++编译的代码:

#包括
int main(int argc,字符**argv)
{
常量标准::字符串编号(“3.14”);
双dbl=std::stod(数字);

std::cout因为
std::stod
已经无法修复,应该在地狱中燃烧,它是按照
std::strtod
实现的,它根据当前语言环境解释双精度。QString总是使用C语言环境(使用QLocale进行特定于语言环境的转换)


创建QCoreApplication实例会导致调用
setlocale(LC_ALL,”)
,它根据环境设置进程的区域设置,从而改变
std::stod
行为。

因为
std::stod
无法修复,应该在地狱中燃烧,所以它是根据
std::strtod
实现的,它根据当前区域设置解释双倍。QString代替always使用C语言环境(使用QLocale进行特定于语言环境的转换)


创建QCoreApplication实例会导致调用
setlocale(LC_ALL,”)
,它根据环境设置进程的区域设置,从而改变
std::stod
行为。

哇,我从来没有想到……我在文档中读到过,但从来没有想到区域设置之间的数字格式会如此不同。我应该用什么来代替stod?好吧,哪个(数字)在大多数欧洲/俄罗斯/南美地区,小数点分隔符是逗号(“,”),而不是点(“.),f.i.
3,14
。除了提供自己的
strtod
/
atof
实现之外,没有其他解决方案,您可以获取Ruby或FreeBSD的一个。我所有的地区变量都设置为“fr\u fr.utf8”但是我的LC_ALL什么都不是。我想在我的语言语法中使用小数点分隔符。我现在就用我自己的函数解析数字。感谢一个lotWow,我从来没有想到……我在文档中读过它,但从来没有想到不同地区的数字格式会如此不同。我应该用什么来代替stod呢,您使用哪种(数字)语言环境?在大多数欧洲/俄罗斯/南美语言环境下,小数点分隔符是逗号(“,”),而不是点(“.”),f.i.
3,14
。除了提供自己的
strtod
/
atof
实现之外,没有其他解决方案,您可以获取Ruby或FreeBSD的实现。我所有的区域设置变量都设置为“fr\u fr.utf8”但是我的LC_ALL什么都不是。我想在我的语言语法中使用小数点分隔符。我现在就用我自己的函数解析数字。非常感谢