首先,我想说对不起因为我认为这个问题是如此微不足道......但是我在C ++中进行了新的编程。
我有以下代码:
int a = 234;
int b = 16;
float c = b/a;
我想打印浮点c
的结果,小数点后2位(结果应该是0.06)但是我没有得到预期的结果。
任何人都可以帮助我吗?我尝试使用CvRound()
和setPrecision()
,但没有任何效果像我期望的那样,或者在我的情况下,我不知道如何使用它们。
答案 0 :(得分:3)
这个问题实际上非常简单。并且没有任何关于精确度等设置的事情。
a
和b
的类型为int
,因此b/a
也会计算为int
类型。其中涉及向零舍入。对于您的值,结果将为零。然后将该值转换为float
。值{0}的int
在转换为float
时会得到0.0
的结果。无论您使用什么精度输出,它仍然会输出零值。
要更改该行为,请在执行除法之前将其中一个值转换为浮动。
float c = b/(float)a;
或
float c = (float)b/a;
当编译器看到float
和int
都参与某个部门时,首先将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
来计算另一个值,则不应该舍入原始值,只应该打印一个值。