web-dev-qa-db-ja.com

C ++のフロートフォーマット

C++で浮動小数点数を小数点以下2桁に切り上げて出力するにはどうすればよいですか?私のコンパイラーは_not defined_であると言っているので、setwsetprecisionには運がありません。

cout << "Total : " << setw(2) << total << endl;

合計出力:_Total : 12.3961_

私はそれをしたい:_12.40_またはそれを切り上げるのが多すぎる場合は_12.39_。

16
eveo

<iomanip>を含め、setw and setprecisionに名前空間スコープを提供する必要があります

#include <iomanip>
std::setw(2)
std::setprecision(5)

試してください:

cout.precision(5);
cout << "Total : " << setw(4)   << floor(total*100)/100 << endl;

または

 cout << "Total : " << setw(4)   << ceil(total*10)/10 << endl;

iostreamは精度の高い機能を提供しますが、setwを使用するには、追加のヘッダーファイルを含める必要がある場合があります。

16
billz

次のように_cout << fixed_またはcout.setf(ios::fixed)、およびstd::cout.precision(<# of decimal digits>)を使用します(OSX Mavericksに含まれているClang-503.0.40コンパイラを使用)。

_#include <iostream>

int main()
{
   using namespace std;

   float loge = 2.718;
   double fake = 1234567.818;
   cout << fixed;
   cout.precision(2);
   cout << "loge(2) = " << loge << endl;
   cout << "fake(2) = " << fake << endl;
   cout.precision(3);
   cout << "loge(3) = " << loge << endl;
   cout << "fake(3) = " << fake << endl;
}
_

これからの出力は次のとおりです(丸めに注意してください):

_loge(2) = 2.72
fake(2) = 1234567.82
loge(3) = 2.718
fake(3) = 1234567.818
_

これはシンプルなバージョンです。 _cout << fixed;_を使用する代わりに、cout.setf(ios::fixed);を使用できます(科学表記を表示するには、fixedscientificに置き換えます。両方とも数値を設定します小数点の右側の数字)。 cout.precision()は、フォーマットフラグにfixedまたはscientificが含まれていない場合、小数点の両側に合計で表示される桁数を設定するためにも使用されることに注意してください。 。これに関するチュートリアルがインターネット上にあります。

16
Jon Spencer

末尾のゼロも含めるには、精度を設定するだけでは不十分です。また、浮動小数点形式をfixed形式に変更する必要があります。これは、setprecisionで指定された桁数を桁数として使用します小数点の後

std::cout << std::fixed << std::setprecision(2) << v;

作業中のオンラインサンプルコード

13
leemes

丸めの末尾のゼロが必要な場合は、C関数printfを使用できます。

#include <iostream>
#include <cstdio>

int main() {
    float v = 12.3961;
    std::printf("%.2f",v); //prints 12.40
}

に比べ:

#include <iostream>
#include <iomanip>

int main() {
    float v = 12.3961;
    std::cout << std::setprecision(4) << v; //prints 12.4
}
3
Rapptz