我有一个浮点数,例如12.12123是否有一个函数只显示小数点12.12后的2位数字?
这是代码:
y1 = ( c1 - (a1 * x)) / b1;
y2 = ( c2 - a2 * x) / b2;
if (y1 == y2)
cout << "The same";
Run Code Online (Sandbox Code Playgroud)
因此,如果y1 = 1.001且y2 = 1.002,则它们看起来不一样.
我试着补充一下.cout.setf(ios :: fixed,ios :: floatfield); cout.precision(2);
但它似乎没有帮助.
Mat*_*lia 35
/* 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;
Run Code Online (Sandbox Code Playgroud)
在C中,如果没有足够的数字可以打印,则0填充会自动添加到右侧.相反,在C++示例中,这是禁用的; 要启用此行为,您应该在流上启用固定模式std::fixed(或启用相关的流标志std::ios_base::setf()).
编辑:我记得错了; 如果fixed未设置,则precision设置向流显示要显示的总位数,包括小数点前的位数.因此,在这种情况下,我认为唯一的方法是使用fixed模式(示例已修复),这将产生相同的行为printf.
你正在寻找printf("%.2f", 12.12123);或:
#include <iostream>
#include <iomanip>
using namespace std;
cout << fixed << setprecision(2) << 12.12123;
Run Code Online (Sandbox Code Playgroud)
编辑:问题改变了,答案也改变了.
您永远不想使用与浮点直接相等,您总是在epsilon容差内进行比较.你epsilon的确很大.
替换if (y1 == y2)为if (abs(y1 - y2) < 0.01).