我有一个浮点数,例如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);
但它似乎没有帮助。
答案 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;