我正在尝试将基于字符串的数字转换为float。不幸的是,我得到的是四舍五入的值或截断的值。我怎样才能解决这个问题。

    std::string text = "199102.92";
    float v = std::stof(text);
    std::cout<<v<<std::endl;


结果是199103
即使我使用setprecision并进行了修复,它也只会影响输出流,但传递给float变量的值仍为199103。我该如何解决这个问题。

我也在c ++中使用过stringstream,但是结果似乎一样,只是显示得很好。

我需要保留小数位数最多2位。

我用过stof,stod,它们都做同样的事情。

您可能会认为我正在使用货币。

最佳答案:

std::setprecisionstd::fixed
#include <iostream>
#include <iomanip>
#include <string>


string text = "199102.92";
float v = std::stof(text);
std::cout << std::setprecision(2) << std::fixed << v << std::endl;


其结果是199102.92

编译器信息:g ++ 5.4.0,--std = c ++ 11。