2016-10-05 8 views
2

私の割り当てでは、小数点以下2桁の倍数を出力することが義務付けられています。サンプルテストの1つでは、出力は78.125です。私の先生はsetprecision関数を使って数字を印刷するように教えてくれました。小数点以下2桁の78.125をC++で78.13として印刷するには

​​

通常これでうまくいくはずです。しかし、私のコードの出力は78.12ですが、出力例は78.13です。とにかくこれをすることがわかりません。

+2

ええと、ビジュアルスタジオで78.13を印刷しますが、78.12 [ここ](http://coliru.stacked-crooked.com/a/2e9ab9c875d15655)を印刷します。 – wally

+1

AFAIKラウンドアップ/ダウン動作は実装定義です。その場合は、[ここ](http://stackoverflow.com/questions/1343890/rounding-number-to-2-decimal-places-in-c)のように手動で手動で丸める必要があります – NathanOliver

+1

私は[この質問](http://stackoverflow.com/questions/11208971/round-a-float-to-a-given-precision)がより良い複製になることを想像してみてください。 – Thebluefish

答えて

3

std::coutstd::setprecisionの丸め動作はの実装がと定義されています。

C++ 11はあなたのstd::cout文の前

std::fesetround(FE_TONEAREST);

を使用してコールすることができますstd::fesetroundという関数を供給することにより、この混乱をクリアします。詳細はhttp://en.cppreference.com/w/cpp/numeric/fenv/feroundを参照してください。

+0

例ですか?私はこれを働かせることはできません[ここ](http://coliru.stacked-crooked.com/a/1384edecedc21010)。 – wally

関連する問題