C ++函数调用顺序(boost) - 困惑

时间:2013-02-09 15:46:51

标签: c++ visual-studio visual-c++ boost rounding

我遇到了一个小的C ++问题。首先,“我的”语言是Java,所以我是C ++的新手。 我有这个功能:

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 个答案:

答案 0 :(得分: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;
    }