3

以下に示すコード スニペットを検討してください。

// setprecision example
#include <iostream>     // std::cout, std::fixed
#include <iomanip>      // std::setprecision

int main () {
  double f =3.14159;
  std::cout.precision(2);

  std::cout << f*100 << '\n';
  return 0;
}

私がしたいのは、画面314に印刷することです(つまり、小数点なしで精度2のfを印刷します)

最初に精度を 2 に設定してから、100 を掛けることを考えたいと思います。

しかし、最終的に f*100 に精度が適用されたようです。f に精度を適用してから、数値を 100 倍して、最後に精度 0 で出力する方法を提案できる人はいますか?

4

3 に答える 3

5

100 を掛けて、精度 0 で出力します。

int main () {
  double f =3.14159;
  std::cout.precision(0);

  std::cout << std::fixed << f*100 << '\n';
  return 0;
}
于 2013-07-23T07:28:44.037 に答える
1

実際には、値をまったく変更せずにこれを行う「適切な」方法があります。std::ostringstream独自のstd::numpunctサブクラスを使用して、これを行うを準備できます。

#include <locale>

class no_decimal_punct: public std::numpunct<char> {
protected:
    virtual char do_decimal_point() const
    { return '\0'; }
};

std::ostringstream上記のno_decimal_punctクラスを使用する を準備できます。

#include <sstream>
#include <iostream>

std::ostringstream strm;
strm.imbue(std::locale(strm.getloc(), new no_decimal_punct));
strm.precision(2);
std::fixed(strm);

double f = 3.14159;
strm << f;
std::cout << strm.str() << '\n';

ここでの利点は、 の値を変更しないことです。fこれにより、FP エラーが原因で意図したものとは異なる結果が出力される可能性があります。

于 2013-07-23T07:47:52.340 に答える
0

314 を表示するには多くの方法があります。

#include <iostream>
using namespace std;
int main() {
  const double PI = 3.1415926;
  cout.precision(3);
  cout<<PI * 100<<endl;
}

#include <iostream>
using namespace std;
int main() {
  const double PI = 3.1415926;
  cout<<(int)(PI * 100)<<endl;
}
于 2013-07-23T07:47:15.277 に答える