从浮点值打印 2 位小数

Print 2 decimals from float value

首先,我想说声抱歉,因为我认为这个问题微不足道……但我是 C++ 编程新手。

我有以下代码:

int a = 234;
int b = 16;
float c = b/a;

我想打印带有 2 位小数的 float c 的结果(结果应该是 0.06)但是我没有得到预期的结果。

谁能帮帮我?我尝试使用 CvRound()setPrecision(),但没有像我预期的那样工作,或者在我的情况下,我不知道如何让它们工作。

int a = 234;
int b = 16;
float c = b/(float)a;
float rounded_down = floorf(c * 100) / 100;   /* floor value upto two decimal places */
float nearest = roundf(c * 100) / 100;  /* round value upto two decimal places */
float rounded_up = ceilf(c * 100) / 100;      /* ceiling value upto two decimal places */

试试这个:

#include <iostream>
#include <iomanip>

using namespace std;

int main(){
   int a = 234;
   int b = 16;
   float c = float(b)/a;
   cout<<fixed<<setprecision(2)<<c;
   return 0;
}

以前 c = b/a 由于 a 和 b 是整数,因此根据您的程序,通过整数除法我们得到的答案为 0。

但是如果我们将其中一个变量(a 或 b)强制转换为浮点数,我们将获得十进制答案。

小数点后的位数可能为2,也可能不是2。为了确保这一点,我们可以使用fixed 和setprecision。 fixed 将确保小数点后的位数是固定的。 setprecision 将设置小数点后的位数。

如果只想打印结果,可以使用printf()格式字符串进行四舍五入:

printf("c = %.2f\n", number, pointer);

否则,如果您需要c计算另一个值,您不应该舍入原始值,只舍入要打印的值。

问题其实简单得令人眼花缭乱。并且与精度等设置没有任何关系。

ab 属于 int 类型,因此 b/a 也被计算为 int 类型。这涉及向零舍入。对于您的值,结果将为零。然后将该值转换为 float。当转换为 float 时,值为零的 int 会给出 0.0 的结果。不管你用什么精度来输出它,它仍然会输出一个零值。

要更改该行为,请在进行除法之前将其中一个值转换为浮点数。

 float c = b/(float)a;

 float c = (float)b/a;

编译器,当它看到 floatint 都参与除法时,首先将 int 转换为 float,然后进行除法floats.