如何在C中舍入浮点值

如何在C中舍入浮点值,c,C,我正在寻找一个函数,它可以对C中的浮点值进行四舍五入,假设数字0.1153846应该四舍五入到小数点后6位,输出为0.115385 虽然在objective c中有类似lroundf()的函数,但不确定如何在我的上下文中使用它 我正在使用gcc编译器,如有任何帮助,将不胜感激 float f = 0.1153846; f = floor(f * 1000000) / 1000000; 这应该行得通 这应该行得通 您可能想这样做 double x = 0.1153846; double

我正在寻找一个函数,它可以对C中的浮点值进行四舍五入,假设数字0.1153846应该四舍五入到小数点后6位,输出为0.115385

虽然在objective c中有类似lroundf()的函数,但不确定如何在我的上下文中使用它

我正在使用gcc编译器,如有任何帮助,将不胜感激

float f = 0.1153846;
f = floor(f * 1000000) / 1000000;
这应该行得通

这应该行得通

您可能想这样做

  double x = 0.1153846;
  double rx = round (x * 1e6) * 1.e-6;
但是,请记住IEEE 754浮点是二进制的,尾数为基数2。

您可能需要这样做

  double x = 0.1153846;
  double rx = round (x * 1e6) * 1.e-6;

但是,请记住IEEE 754浮点是二进制的,以2为底尾数。

浮点为十进制类型是非常不寻常的,这意味着无论您做什么,舍入的结果通常都会在浮点中表示,并且会再次调整以匹配可表示的数字

如果出于计算目的确实需要这种舍入,则浮点类型可能不是正确的使用类型


如果只是为了显示,请使用
printf
系列提供的控件。

浮点为十进制类型是很不寻常的,这意味着无论您做什么,舍入的结果通常都会以浮点形式表示,并将再次调整以匹配可表示的数字

int precision = 3;
float num = 1.63322;
printf("%.*f",precision,num);
如果出于计算目的确实需要这种舍入,则浮点类型可能不是正确的使用类型



如果只是为了显示,请使用
printf
系列提供的控件。

可能的重复不是很好的重复:这篇文章对舍入到小数位数(6)感兴趣。建议四舍五入为整数。其中涉及到一些微妙而重要的不同问题。可能的重复不是一个好的重复:这篇文章对舍入到小数位数(6)感兴趣。建议四舍五入为整数。这涉及到一些微妙而重要的不同问题。这也是我提出的。让我检查一下它是如何工作的。光是它不起作用。我猜像f+0.5这样的东西需要做@KerrekSB+5应该按照您提到的那样添加,以四舍五入到下一个数字。谢谢。f=楼层((f*1000000)+0.5)/1000000;会是ok@AmitSinghTomar:是的,就是这个:-)这是我也想到的。让我检查一下它是如何工作的。光是它不起作用。我猜像f+0.5这样的东西需要做@KerrekSB+5应该按照您提到的那样添加,以四舍五入到下一个数字。谢谢。f=楼层((f*1000000)+0.5)/1000000;会是ok@AmitSinghTomar:是的,这是一个:-)但是输出是0.115380,这不是我想要的。尝试使用
1e6
1。e-6
而不是像
双rx=round(x*1e6)/1.e6那样使用稍微迂腐的答案但输出值为0.115380,这不是我想要的。尝试使用
1e6
1。e-6
而不是像
双rx=round(x*1e6)/1.e6那样使用稍微迂腐的答案这不会取整
num
。它会打印一个四舍五入版本,但是
num
不受影响。这不会四舍五入
num
。它会打印一个四舍五入的版本,但是
num
不受影响。
int precision = 3;
float num = 1.63322;
printf("%.*f",precision,num);