C ++でdoubleをstringに変換しようとしています。マシンのイプシロンを考慮して、特定の最小量の有効数字を使用してフォーマットしたいと思います。
2 つの最小有効小数点の例として:
4 -> "4.00"
4.4 -> 「4.40」
4.56434444 -> 「4.56434444」
理想的には、ストリームにロケールと numpunct ファセットを吹き込みたい
私は現在、次のようなものを使用しています
if(abs(floor((m_mes * 100) + 0.5) - (m_mes * 100)) > (std::numeric_limits<double>::epsilon() * 10000))
buffer << fixed << m_mes;
else
buffer << fixed << setprecision(2) << m_mes;
編集: 絶対値と丸めは、イプシロンを補正した結果です。ここでの基本的な考え方は、floor(num * 100) を取得し、(num * 100) から減算することです。差がゼロでない場合は、2 より高い精度を使用します。
私の最小有効桁数は2であるため、可変量を受け入れるためにアルゴリズムを遅くしたくありませんでした。
numpunct ファセットでこれを行う方法はありますか? 私はロケールに不慣れで、ほとんど経験がありません。それとも、私が持っているものを達成するためのより簡単な方法ですか?