私は、最大10の小数点以下の桁数をC++でdouble
値を文字列化したいので、私はしかしC++で小数点以下1桁以上を印刷しますか?
std::stringstream s;
double value = 3.1415926;
s << "value is " << std::setprecision(10) << value;
のようなものを使用し、value
は、4.0などの一部の正確な整数値を持っている場合、私はそれが4.0
ないを印刷したいですちょうど4
。 C++ stringstream
、または旧式のsnprintf()
のいずれかでこれを実現する方法はありますか?
これまでのところ、私は考えることができる唯一のソリューションは、floor(value)
にvalue
を比較することです:
std::stringstream s;
if (floor(value) == value)
s << std::setprecision(1) << std::fixed << value;
else
s << std::setprecision(10) << value;
私がしなければならない場合、私は、そのソリューションをおこうが、私はいくつかを見下ろすだ場合、私は好奇心が強いです私は条件付きを避けることができるiostreamガジェット。
私ので、私は、あなたの答えで混乱していました私自身の条件付き解決法で 'std :: fixed'を使っています。しかし、関係なく、私はあなたの "ライブデモ"をチェックしただけで、目的の出力を生成していません。 '4.0000000000'ではなく' 4.0'(正確な積分値の特殊な場合)を出力する必要があります。 –
@ RyanV.Bissellあなた自身の質問に答えました。精度を条件付きで設定する必要があります。 –
それでは、誰かが「」や「」のツールがあなたの目標を直接達成するのであれば、それを条件付きでやり直す必要があります。私はそれを受け入れます。 –