2016-11-23 160 views
1

我想将基于字符串的数字转换为浮点数。不幸的是,我得到的是舍入值或截断值。我怎样才能解决这个问题。C++将字符串转换为浮点数

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

这导致199103 即使我使用setprecision和固定的,那么它只会影响输出流,但传递到浮点型变量的值保持199103.我如何可以诉诸这个问题。

我也使用C++中的stringstream,但结果似乎是相同的,除非它显示良好。

我需要保留小数达2位。

我已经使用stof,stod,他们都做同样的事情。

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

+0

std :: stof()使用当前语言环境确定用作小数点的字符。也许在你的语言环境中,它不是点,而是例如逗号? – Rene

回答

1

我假设你错误地使用了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。

+0

所以v中存储的值实际上是199102.92或其他东西?此外,如果我做一些数学说v - 199102.00。 , 然后。设置精度和固定格式的输出流不是存储的数字。 –

+0

这是199102.921875,但这是由于浮点表示(IEEE 754标准)的限制。如果您需要存储确切值,请考虑使用'long long'来表示浮点值(在这种情况下,您需要分别存储尾数和指数)或使用一些第三方库。 此外,'double'可能比'float'更精确。 – Qumeric