說我有一個字符串作爲這樣的(其實我正從其他地方該值)的浮動字符串轉換爲浮動
std::string val = "2.31";
現在我做這樣的事情
float f = atof(val);
現在f有像2.31xxxxxxxxxxx
任何建議我怎麼能得到小數點後兩個地方?使f看起來像2.3100000 ...
說我有一個字符串作爲這樣的(其實我正從其他地方該值)的浮動字符串轉換爲浮動
std::string val = "2.31";
現在我做這樣的事情
float f = atof(val);
現在f有像2.31xxxxxxxxxxx
任何建議我怎麼能得到小數點後兩個地方?使f看起來像2.3100000 ...
你永遠不會得到每個輸入的精確值。這是由於計算機中浮點的表示。這也是爲什麼你不能在浮動上做==
。如果你想精確,你將不得不使用其他格式(BCD?)
'1.0 == 1.0'就好了。 –
@BenjaminBannier:「1.0」是一個輸入,而不是每個輸入。 –
@BenjaminBannier讓我們同意,根據你的經驗,它似乎工作到目前爲止。 – 2013-08-26 18:23:14
template <typename T>
T val(const std::string& s)
{
T x;
std::stringstream ss;
ss << s;
ss >> x;
return x;
}
int main() {
float f =val<float>("2.31");
std::cout<<f;
}
這個問題不會將「float」設置爲2.31。 –
@EricPostpischil 2.31是[顯示](http://ideone.com/XBdQ21)兩位小數 – P0W
問題標題表示需要轉換爲'float'。發送帶有兩位小數的數字輸出不會轉換爲「float」。您鏈接到的代碼中的實際「float」對象不具有2.31的確切值。 –
二進制浮點不能完全代表分數小數值。在大多數情況下,存儲在float
中的值將是近似值。但是,如果使用的數字不超過std::numeric_limits<float>::digits10
,則使用正確的打印算法將恢復原始數字。
'f'絕對不是「類似2.3131333e-xx的東西」。 –
你在用什麼編譯? 'atof'需要一個'const char *'。 –
你是對的這是一個很大的數字沒有 – Rajeshwar