2016-11-23 40 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