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() は double を返します。(両方の呼び出しで同じ double)

これがどのように起こっているのかよくわかりませんか?

.

4

1 に答える 1

3

別の投稿から(マイクへのクレジット):

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;
    }
于 2013-02-09T15:52:40.683 に答える