为什么在C ++中调试和运行输出不同?

时间:2020-09-09 02:05:06

标签: c++

我想读取“ .text”文件并将字符串转换为双精度。在调试模式下,我可以读取文本为99,03,但是在运行模式下,我只能读取99。我的转换代码如下

   double a = std::stod(text)

1 个答案:

答案 0 :(得分:2)

std::stod受语言环境的影响。

#include <iostream>
#include <string>
#include <clocale>

int main(void){
    std::setlocale(LC_ALL, "C");

    std::string s{"99.03"}; 
    double d = std::stod( s );
    std::cout<< d << "\n";
    std::setlocale(LC_ALL, "de_DE.UTF-8"); // A locale installed on your machine.
    std::string s2{"99,03"};
    double d2 = std::stod( s2 );
    std::cout<< d2 << "\n";
}

您可能会得到如下结果:(在msvc和gcc 9.3.0上测试)

99.03
99.03

如果您还希望std::cout将逗号打印为小数分隔符,则需要imbue。您可以参考this post

相关问题