设置小数点后的数字

时间:2010-10-13 11:40:23

标签: c++ digits

我有一个浮点数,例如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);

但它似乎没有帮助。

7 个答案:

答案 0 :(得分:34)

/* 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设置会向流中显示要显示的位数,包括小数点前的位数。因此,在这种情况下,我认为唯一的方法是使用fixed模式(已修复的示例),这将产生printf的相同行为。


链接:

答案 1 :(得分:7)

您正在寻找printf("%.2f", 12.12123);或:

#include <iostream>
#include <iomanip>

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

编辑:问题已更改,答案也已更改。

您永远不希望使用与浮点直接相等,始终在epsilon容差范围内进行比较。您的epsilon非常大。

if (y1 == y2)替换为if (abs(y1 - y2) < 0.01)

答案 2 :(得分:2)

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

这将打印1.46

答案 3 :(得分:2)

cout.precision(2);
cout <<f;

答案 4 :(得分:2)

#include <iostream>
#include <iomanip>

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

答案 5 :(得分:2)

你可能会问错误的问题。请尝试以下方法:

double diff = fabs(y1-y2);
if(diff < 0.005)
    cout << "Almost same";

答案 6 :(得分:1)

cout.setf(ios::fixed, ios::floatfield);
cout.precision(2);
float al = 42.645; //sample
cout << al;