设置小数点后的数字

use*_*401 17 c++ digits

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


链接:


Fré*_*idi 7

你正在寻找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).