0

我有一个小 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() 返回一个双精度值。(两次通话相同的两倍)

我不太确定这是怎么回事?

.

4

1 回答 1

3

从另一个帖子(信用到麦克风):

boost lexical_cast的文档中:

对于更多涉及的转换,例如精度或格式需要比 lexical_cast 的默认行为提供的更严格的控制,建议使用传统的字符串流方法。如果转换是数字到数字,则 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;
    }
于 2013-02-09T15:52:40.683 回答