首页 > 解决方案 > 为什么在 C++ 中调试和运行输出不同?

问题描述

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

   double a = std::stod(text)

标签: c++

解决方案


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则为必填项。你可以参考这篇文章


推荐阅读