たとえば、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);
しかし、それは助けにはならないようです。
_/* 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
と同じ動作をします。
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)
に置き換えます。
double num = 1.4567;
printf("%.2f",num);
これは1.46を印刷します
cout.precision(2);
cout <<f;
#include <iostream>
#include <iomanip>
int main ()
{
double d = 1.242354345;
using namespace std;
cout << setiosflags(ios::fixed | ios::showpoint)
<< setprecision(2)
<< d;
}
おそらく間違った質問をしているでしょう。以下を試してください:
double diff = fabs(y1-y2);
if(diff < 0.005)
cout << "Almost same";
cout.setf(ios::fixed, ios::floatfield);
cout.precision(2);
float al = 42.645; //sample
cout << al;