std :: ostreamに精度のために小数点以下の桁数の最小値を設定します

StackOverflow https://stackoverflow.com/questions/2489627

質問

は小数点以下の桁数の「最小」の数を設定する方法はあるものの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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top