1

stringstream を使用して、double 数値のドットの後に小数点以下の最大桁数を出力するにはどうすればよいですか (末尾のゼロや丸めはありません)。たとえば、小数点以下 5 桁まで印刷したい場合は、次のようにします。

1 -> 1
1.23 -> 1.23
1.234 -> 1.234
1.2345 -> 1.2345
1.23456 -> 1.23456
1.234567 -> 1.23456
1.2345678 -> 1.23456
1230.2345678 -> 1230.23456 <- Demonstrating that I am not talking about significant digits of the whole number either

私が見るすべてのツール (setw、setprecision、fixed など) の中で、これを理解できないようです。ありがとう!

4

2 に答える 2

1

stringstreamオプションでこれを絶対にやりたいですか?

round次のような関数をコーディングできます。

double round(double n, int digits) {
    double mult = pow(10, digits);
    return floor(n*mult)/mult;
}

次に、を印刷しますround(1.2345678, 5)

于 2012-11-01T22:55:56.873 に答える
0

これを行うための組み込みの方法はありません(私の知る限り)。ただし、次のようなハッキングが可能です。

void print_with_places(double num, unsigned places) {
   for (double i = 1; i < num; i*=10) { //have to use a double here because of precision...
      ++places;
   }
   std::cout << std::setprecision(places) << num;
}

それは最もきれいではありませんが、それはそれであるか、文字列に出力してから文字列を操作します。

于 2012-11-01T22:57:07.620 に答える