16

std :: ostreamが出力する小数点以下の「最小」数を設定する方法はありますか?

たとえば、印刷したい2つの未知のdouble変数があるとします(説明のためにここに値を追加しました)。

double a = 0;
double b = 0.123456789;

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つだけで、最大精度と最小精度を区別する機能はありません。寛大なアドバイスをありがとうございました!

4

2 に答える 2

3
cout << setprecision(1) << fixed << d << endl;

setprecisionの後に修正されて使用されます。

編集:これはあなたが望むものです。dに基づいて精度が変わります。

cout << setprecision(d?9:1) << fixed << d << endl;
于 2010-03-22T02:11:55.920 に答える
1

数値を(高精度で)文字列に変換し、末尾のゼロを取り除くことなく、あなたが求めていることを達成する方法はないと思います。

これは適切です。なぜなら、末尾のゼロがあるからといって、そこに精度がないことを意味するわけではなく、実行時にそれを判断できないからです。

たとえば、安価な体重計で物体の重量を測定すると、1.0kgになる可能性があります。

高精度のはかりで計量すると、1.00000kgになる場合があります。末尾のゼロがあるからといって、精度を破棄する必要があるという意味ではありません。

于 2010-03-22T02:21:11.493 に答える