web-dev-qa-db-ja.com

小数点以下の桁を設定します

たとえば、12.12123のように浮動小数点数があります。小数点12.12の後の2桁の数値のみを表示する関数はありますか?

コードは次のとおりです。

y1 = ( c1 - (a1 * x)) / b1;
 y2 = ( c2 - a2 * x) / b2;

if (y1 == y2)
  cout << "The same";

したがって、y1 = 1.001とy2 = 1.002の場合、それらは同じようには見えません。

追加しようとしました。 cout.setf(ios :: fixed、ios :: floatfield); cout.precision(2);

しかし、それは助けにはならないようです。

16
user474401
_/* The C way */
#include <stdio.h>
...
float f = 12.12123f;
printf("%.2f",f);

// The C++ way
#include <iostream>
...
float f = 12.12123f;
std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
std::cout.precision(2);
std::cout << f;

// The alternative C++ way
#include <iostream>
#include <iomanip>
...
float f = 12.12123f;
std::cout << std::fixed << std::setprecision(2) << f;
_

Cでは、印刷するのに十分な桁数がない場合、0パディングが自動的に右側に追加されます。 C++の例では、代わりにこれは無効になっています。この動作を有効にするには、 _std::fixed_ でストリームの固定モードを有効にする必要があります(または std::ios_base::setf() で関連するストリームフラグを有効にします) 。

編集:間違ったことを思い出しました。 fixedが設定されていない場合、precisionの設定は、表示するtotal桁数をストリームに伝えます。また、小数点の前のもの。したがって、この場合、唯一の方法はfixedモード(例は修正済み)を使用することだと思います。これはprintfと同じ動作をします。


リンク:

34
Matteo Italia

printf("%.2f", 12.12123);または次を探しています:

_#include <iostream>
#include <iomanip>

using namespace std;
cout << fixed << setprecision(2) << 12.12123;
_

EDIT:質問が変更されたため、回答も変更されました。

浮動小数点で直接等式を使用することは決してありません。常に ε 許容範囲内で比較します。 epsilonは非常に大きいです。

if (y1 == y2)if (abs(y1 - y2) < 0.01)に置き換えます。

7
double num = 1.4567;
printf("%.2f",num);

これは1.46を印刷します

2
patentfox
cout.precision(2);
cout <<f;
2
dutt
#include <iostream>
#include <iomanip>

int main ()
{
   double d = 1.242354345; 
   using namespace std;
   cout << setiosflags(ios::fixed | ios::showpoint)
        << setprecision(2)
        << d; 
}
2
Armen Tsirunyan

おそらく間違った質問をしているでしょう。以下を試してください:

double diff = fabs(y1-y2);
if(diff < 0.005)
    cout << "Almost same";
2
patentfox
cout.setf(ios::fixed, ios::floatfield);
cout.precision(2);
float al = 42.645; //sample
cout << al;
1
Ruel