double を文字列に変換し、小数点以下 2 桁に丸めたい。1.009 を「1.01」、1.0 を「1」と表示したい。これは私が試したことです:
std::ostringstream oss;
oss << std::fixed << std::setprecision(2) << std::noshowpoint << 1.0;
width を設定せず、 を指定しても、「1.00」が出力されますstd::noshowpoint
。望ましい表現を達成する方法は?
double を文字列に変換し、小数点以下 2 桁に丸めたい。1.009 を「1.01」、1.0 を「1」と表示したい。これは私が試したことです:
std::ostringstream oss;
oss << std::fixed << std::setprecision(2) << std::noshowpoint << 1.0;
width を設定せず、 を指定しても、「1.00」が出力されますstd::noshowpoint
。望ましい表現を達成する方法は?
最善の解決策:
inline double twodec(double n) { return floor(n * 100 + 0.5) / 100; }
oss << twodec(1.0) << ' ' << twodec(1.009);
討論
http://www.cplusplus.com/reference/ios/fixed/(イタリック鉱山)から
floatfieldがfixedに設定されている場合、float値は固定小数点表記を使用して書き込まれます。つまり、値は、小数部で、指数部分なしで、小数部で指定された桁数で表されます。
したがって、「修正済み」は機能しません。
そうは言っても、あなたがやりたいことをするために私が考えることができる唯一の方法は次のとおりです。
floor(n * 100 + 0.5) / 100
)に丸めてから、デフォルトの表示を使用します(つまり、固定、科学、または精度を指定しないでください。有効な場合fixed
はscientific
、最初にでクリアしてくださいstd::cout.unsetf(std::ios::floatfield)
)。ostringstream
末尾の0と任意の「。」を削除します。(かなり恐ろしい)。