std :: ostreamに精度のために小数点以下の桁数の最小値を設定します
質問
は小数点以下の桁数の「最小」の数を設定する方法はあるもののstd :: ostreamに意志出力?
たとえば、私が印刷したいことを、私は2つの未知の二重の変数を持っていると言う(の値は、説明のためにここに追加):
double a = 0;
double b = 0.123456789;
私は私の最大の小数精度を設定することができますので、I出力b
正確
std::cout << std::setprecision(9) << b << std::endl;
>>> 0.123456789
、「最大」の精度を保持したままは、「最小」の精度(小数点以下の最小数)を設定する方法があり、その結果
std::cout << a << std::endl << b << std::endl;
利回り
0.0
0.123456789
ない
0
0.123456789
ありがとう! フィル
<時間>これに対する短い答えは「ノー」です。ストリームは、最大と最小の精度を区別するためのない施設で、唯一の精密設定を有しています。すべてのあなたの寛大なアドバイスをありがとう!
解決
私はあなたが(高精度で)文字列に番号をつけず尋ねると、末尾のゼロを剥がすているものを達成する方法はないと思います。
後続のゼロがあるという理由だけで精度がそこにないという意味ではありませんし、実行時にはそれを伝えることはできません。ので、これは、適切です 私は安価なスケールで物体の重量を測定する場合は、
例えば、それは1.0キログラムであってもよい。
Iは、高精度のスケールでそれを量る場合、は、1.00000キログラムであってもよいです。後続のゼロがあるという理由だけで、精度が破棄されるべきであることを意味するものではありません。
他のヒント
cout << setprecision(1) << fixed << d << endl;
てSetPrecision後の固定に使用します。
編集:これは、あなたが望むものです。それはDに基づいて精度を変更します。
cout << setprecision(d?9:1) << fixed << d << endl;
所属していません StackOverflow