从浮点值打印2位小数

时间:2015-10-05 11:08:38

标签: c++ floating-point precision

首先,我想说对不起因为我认为这个问题是如此微不足道......但是我在C ++中进行了新的编程。

我有以下代码:

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

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

任何人都可以帮助我吗?我尝试使用CvRound()setPrecision(),但没有任何效果像我期望的那样,或者在我的情况下,我不知道如何使用它们。

4 个答案:

答案 0 :(得分:3)

这个问题实际上非常简单。并且没有任何关于精确度等设置的事情。

ab的类型为int,因此b/a也会计算为int类型。其中涉及向零舍入。对于您的值,结果将为零。然后将该值转换为float。值{0}的int在转换为float时会得到0.0的结果。无论您使用什么精度输出,它仍然会输出零值。

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

 float c = b/(float)a;

 float c = (float)b/a;

当编译器看到floatint都参与某个部门时,首先将int转换为float,然后进行{float的划分{1}}秒。

答案 1 :(得分:0)

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 */

答案 2 :(得分:0)

试试这个:

#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)中的一个变换为float,我们将获得十进制答案。

十进制后的位数可能是也可能不是2.为了确保这一点,我们可以使用fixed和setprecision。 修复将确保修正小数点后的位数。 setprecision 将设置十进制后的位数。

答案 3 :(得分:0)

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

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

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