常量字符* 与C++的双重翻译问题
const char* to double translation issue with C++
我有两个使用相同库的示例应用程序,它们之间的主要区别在于一个使用 qt,另一个应用程序是控制台应用程序。
在公共库中,我有以下测试代码:
double test = 0.1;
double test2 = atof("2.13134");
double test3 = atof("1,12345");
如果我使用非qt应用程序,则值为:
test = 0.10000000000001
test2 = 2.1323399999999999998
test3 = 1 // This is the expected result using a ',' as delimitation character
但是对于 qt 应用程序:
test = 0.10000000000001
test2 = 2 // This is not expected!!!
test3 = 1.1234500000000000001
是否有任何情况,"atof"的行为会因为qt而改变?
std::atof
取决于当前设置的区域设置,以告诉它哪个字符是小数点。在默认情况下("C 语言环境"),即句点字符 ' .
'。
Qt很可能将语言环境设置为其他内容。您可以使用标准 C[++] 机制还原它:
std::setlocale(LC_ALL, "C");
您注意到的问题很可能是由Qt的语言环境概念引起的。您可以使用:
QLocale::setDefault(QLocale::C);
让它像atof
一样工作.
更新
似乎QLocale::setDefault
没有设置Qt使用的默认语言环境。它仅设置构造QLocale
时将创建的默认区域设置。有关详细信息,请参阅更改 Qt 中的语言环境和接受的答案。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 在 opengl 中翻译相机时遇到问题
- SDK指针的问题 - c++到德尔福的翻译
- 处理Qiloader时的Qt翻译问题
- Qt插件翻译出现问题
- Qt中的翻译问题
- 常量字符* 与C++的双重翻译问题
- 翻译多维数据集时出现问题
- 将Python算法翻译成C++时遇到问题
- 翻译/音译问题