从浮点值打印 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
计算另一个值,您不应该舍入原始值,只舍入要打印的值。
问题其实简单得令人眼花缭乱。并且与精度等设置没有任何关系。
a
和 b
属于 int
类型,因此 b/a
也被计算为 int
类型。这涉及向零舍入。对于您的值,结果将为零。然后将该值转换为 float
。当转换为 float
时,值为零的 int
会给出 0.0
的结果。不管你用什么精度来输出它,它仍然会输出一个零值。
要更改该行为,请在进行除法之前将其中一个值转换为浮点数。
float c = b/(float)a;
或
float c = (float)b/a;
编译器,当它看到 float
和 int
都参与除法时,首先将 int
转换为 float
,然后进行除法float
s.
首先,我想说声抱歉,因为我认为这个问题微不足道……但我是 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
计算另一个值,您不应该舍入原始值,只舍入要打印的值。
问题其实简单得令人眼花缭乱。并且与精度等设置没有任何关系。
a
和 b
属于 int
类型,因此 b/a
也被计算为 int
类型。这涉及向零舍入。对于您的值,结果将为零。然后将该值转换为 float
。当转换为 float
时,值为零的 int
会给出 0.0
的结果。不管你用什么精度来输出它,它仍然会输出一个零值。
要更改该行为,请在进行除法之前将其中一个值转换为浮点数。
float c = b/(float)a;
或
float c = (float)b/a;
编译器,当它看到 float
和 int
都参与除法时,首先将 int
转换为 float
,然后进行除法float
s.