2013-02-09 50 views
0

我有一個小的C++問題。首先,「我的」語言是Java,所以我是C++的新手。 我有這個功能:C++函數調用順序(boost) - 困惑

double readableDouble(double input) 
{ 
    return (int)(input*100+0.5)/100.0; 
} 

正如你所看到的,沒有什麼特別的。現在我從另一個函數(在同一個類中)調用函數:

 cout << readableDouble(4434.21121131234323243) <<endl; // result: 4434.22 all okay 
     cout << readableDouble(tempTrack.getLenght()/1000.0); // result: 30.56 all okay 
     string lenght = boost::lexical_cast<string>(readableDouble((tempTrack.getLenght()/1000.0))); // result 30.55999999999982. expected: 30.56 

getLenght()返回一個double。 (兩個電話相同)

我不太確定這是怎麼發生的?

+1

你期望的輸出? – 2013-02-09 15:47:46

+0

哦,應該是30.56。 – Mirco 2013-02-09 15:48:24

+0

也許你會發現[this](http://floating-point-gui.de/)有用 – 2013-02-09 15:48:58

回答

3

From another post(感謝Mic):

從文檔boost lexical_cast

對於更復雜的轉換,例如在精密或格式化 需要比由默認的行爲提供了更嚴格的控制 lexical_cast,推薦使用傳統的stringstream方法。 如果轉換數字爲數字,則numeric_cast可能會提供 比lexical_cast更合理的行爲。

例子:

#include <sstream> 

    #include <iomanip> 

    int main() { 
     std::ostringstream ss; 
     double x = 5; 
     ss << std::fixed << std::setprecision(2); 
     ss << x; 
     std::string s = ss.str(); 
     return 0; 
    }