18

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

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

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);

しかし、それは役に立たないようです。

4

7 に答える 7

38
/* 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桁数をストリームに伝えます。したがって、この場合、唯一の方法はモード (例は修正済み)を使用することだと思います。これにより、 と同じ動作が得られます。fixedprintf


リンク:

于 2010-10-13T11:45:29.227 に答える
7

あなたが探している、printf("%.2f", 12.12123);または:

#include <iostream>
#include <iomanip>

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

編集:質問が変更されたため、答えも変更されました。

浮動小数点で直接等値を使用したくない場合は、常にイプシロンの許容範囲内で比較します。あなたepsilonはちょうどかなり大きいです。

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

于 2010-10-13T11:42:58.767 に答える
3
double num = 1.4567;
printf("%.2f",num);

これは 1.46 を出力します

于 2010-10-13T11:44:25.750 に答える
2
#include <iostream>
#include <iomanip>

int main ()
{
   double d = 1.242354345; 
   using namespace std;
   cout << setiosflags(ios::fixed | ios::showpoint)
        << setprecision(2)
        << d; 
}
于 2010-10-13T11:59:05.730 に答える
2
cout.precision(2);
cout <<f;
于 2010-10-13T11:45:05.517 に答える
2

あなたはおそらく間違った質問をしています。以下を試してください:

double diff = fabs(y1-y2);
if(diff < 0.005)
    cout << "Almost same";
于 2010-10-13T12:13:57.507 に答える
1
cout.setf(ios::fixed, ios::floatfield);
cout.precision(2);
float al = 42.645; //sample
cout << al;
于 2010-10-13T11:47:40.363 に答える