首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >const *对C++的双重翻译问题

const *对C++的双重翻译问题
EN

Stack Overflow用户
提问于 2016-02-09 14:51:08
回答 2查看 362关注 0票数 7

我有两个使用相同库的示例应用程序,它们之间的主要区别是一个使用qt,另一个应用程序是控制台应用程序。

在公共库中,我有以下测试代码:

代码语言:javascript
复制
double test = 0.1;
double test2 = atof("2.13134");
double test3 = atof("1,12345");

如果使用非qt应用程序,则值为:

代码语言:javascript
复制
test = 0.10000000000001
test2 = 2.1323399999999999998
test3 = 1   // This is the expected result using a ',' as delimitation character

但在qt应用程序中:

代码语言:javascript
复制
test = 0.10000000000001
test2 = 2     // This is not expected!!!
test3 = 1.1234500000000000001

有没有因为qt而“atof”的行为发生变化的情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-09 15:02:21

std::atof依赖于当前设置的区域设置来告诉它哪个字符是小数点。在默认情况下("C语言环境“),即句点字符'.‘。

Qt很可能正在将区域设置为其他的东西。您可以使用标准C[++]机构将其还原

代码语言:javascript
复制
std::setlocale(LC_ALL, "C");
票数 7
EN

Stack Overflow用户

发布于 2016-02-09 14:58:46

您注意到的问题很可能是由Qt的区域设置概念引起的。您可以使用:

代码语言:javascript
复制
QLocale::setDefault(QLocale::C);

让它像atof一样工作。

更新

QLocale::setDefault似乎没有设置Qt使用的默认区域设置。它只设置在构造QLocale时将创建的默认区域设置。有关更多信息,请参见在Qt中更改区域设置和公认的答案。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35295052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档