设置小数点后的位数

18

我有一个浮点数,例如12.12123。是否有一个函数能够只显示小数点后两位数字 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);

但似乎没有帮助。


你真的在问“如何比较两个浮点数,使它们在小数点后保留两位时相同吗?” - EvilTeach
7个回答

41
/* 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模式(例如fixed示例),这将产生与printf相同的行为。

链接:


9
你需要的是 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)


它会在控制台输出结果,但我如何更改变量y1的值? - user474401
y1 = (c1 - (a1 * x)) / b1; cout << fixed << setprecision(2) << y1; - user474401
1
你可以使用 y1 = floor(y1 * 100 + 0.5) / 100;,但是这样做没有任何意义:浮点精度 无法表示所有的十进制数,实际上在我的平台上你的例子 12.12 被近似为 12.119999999999999 - Frédéric Hamidi

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

这将打印出1.46。


它被标记为C++,所以他肯定是指使用iostream库。 - Ruel
早期它被标记为C,后来由于MSalters指出标签和标题之间的不一致性而更改为C ++。 - patentfox

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

2
#include <iostream>
#include <iomanip>

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

2
您可能在问错问题。请尝试以下建议:
double diff = fabs(y1-y2);
if(diff < 0.005)
    cout << "Almost same";

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

1
那么输出看起来是什么样子的? - David Doria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接