我需要一个C舍入函数来舍入像MATLAB的舍入函数这样的数字。有吗?如果您不知道MATLAB的圆函数如何工作,请参阅以下链接:
我在想我可能只是编写自己的简单圆函数来匹配MATLAB的功能。
谢谢,
DemiSheep
答案 0 :(得分:7)
这听起来类似于math.h的round()函数
这些功能应围绕他们的 参数为最接近的整数值 以浮点格式,舍入 中途远离零的情况, 无论目前的四舍五入 方向。
还有lrint()给你一个int返回值,虽然lrint()和朋友服从当前的舍入方向 - 你必须使用fesetround()来设置它找到舍入方向here。
答案 1 :(得分:3)
不,C(在C99之前)没有round
功能。典型的方法是这样的:
double sign(double x) {
if (x < 0.0)
return -1.0;
return 1.0;
}
double round(double x) {
return (long long)x + 0.5 * sign(x);
}
这会舍入为整数,假设原始数字位于可由long long
表示的范围内。如果你想要在小数点后舍入到特定数量的位置,那可能会有点困难。如果数字不是太大或太小,你可以乘以10 N ,舍入为整数,并再次除以10 N (请记住这一点可能会引入一些自己的舍入错误。)
答案 2 :(得分:3)
查看标准标题<fenv.c>
,特别是fesetround()
函数和四个宏FE_DOWNWARD
,FE_TOWARDZERO
,FE_TONEAREST
和FE_UPWARD
。它控制浮点值如何舍入为整数。确保您的实现(即C编译器/ C库)实际支持这一点(通过检查fesetround()
的返回值和实现文档)。
尊重这些设置的功能包括(来自<math.h>
):
llrint()
llrintf()
llrintl()
lrint()
lrintf()
lrintl()
rint()
rintf()
rintl()
llround()
llroundf()
llroundl()
lround()
lroundf()
lroundl()
nearbyint()
nearbyintf()
nearbyintl()
取决于您的需求(参数类型和返回类型,有或没有不精确的浮点异常)。
注意:round()
,roundf()
和roundl()
看就像它们属于上面的列表一样,但这三个做不尊重fesetround()
!!
有关详细信息,请参阅您最喜欢的标准库文档。
答案 3 :(得分:2)
如果标准库中没有round()
函数,如果处理浮点数,您可以随意评估每个值,分析要舍入到的位置后面的数字。 ,检查它是否更大,等于或小于5;然后,如果该值小于5,您可以floor()
您最终查看的数字。如果您要舍入的位置之后的数字值为5或更大,则可以继续使用函数floor()
评估该数字,然后添加1.
我为与此相关的任何低效率道歉。
答案 4 :(得分:1)
如果我没弄错,你正在找floor and ceil之类的东西,你会在<math.h>
找到它们
答案 5 :(得分:0)
文档指定
Y = round(X)将X的元素舍入到最接近的整数。
不是复数:根据常规MATLAB操作,它对矩阵的所有元素进行操作。上面公布的C等价物只能同时处理单个值。 如果您可以使用C ++,请查看Valarray。如果没有,那么好的'for循环就是你的朋友。