函数
<cmath> <ctgmath>

lround

long int lround  (double x);long int lroundf (float x);long int lroundl (long double x);
long int lround (double x);long int lround (float x);long int lround (long double x);long int lround (T x);           // additional overloads for integral types
四舍五入到最近整数并转换为长整数
返回最接近 x 的整数值,当值为一半时向远离零的方向舍入。

返回的舍入值类型为 long int。有关返回 long long int 的等效函数,请参阅 llround

头文件 <tgmath.h> 提供了此函数的类型通用宏版本。
此头文件(<cmath>)中为整型类型提供了其他重载:这些重载实际上会在计算前将 x 转换为 double(定义于 T 为任何整型)。

参数

x
要取整的值。

返回值

舍入到最近整数且转换为 long int 类型的 x 的值。
如果取整后的值超出了返回类型的范围,则返回的值是未指定的,并且可能会发生定义域错误或上溢范围错误(或者,根据具体实现,也可能什么都不发生)。

如果发生定义域错误
- 并且 math_errhandling 设置了 MATH_ERRNO:全局变量 errno 会被设置为 EDOM
- 并且 math_errhandling 设置了 MATH_ERREXCEPT:将引发 FE_INVALID

如果发生上溢范围错误
- 并且 math_errhandling 设置了 MATH_ERRNO:全局变量 errno 被设置为 ERANGE
- 并且 math_errhandling 设置了 MATH_ERREXCEPT:将引发 FE_OVERFLOW

示例

1
2
3
4
5
6
7
8
9
10
11
12
/* lround example */
#include <stdio.h>      /* printf */
#include <math.h>       /* lround */

int main ()
{
  printf ( "lround (2.3) = %ld\n", lround(2.3) );
  printf ( "lround (3.8) = %ld\n", lround(3.8) );
  printf ( "lround (-2.3) = %ld\n", lround(-2.3) );
  printf ( "lround (-3.8) = %ld\n", lround(-3.8) );
  return 0;
}

可能的输出

Rounding using to-nearest rounding:
lround (2.3) = 2
lround (3.8) = 4
lround (-2.3) = -2
lround (-3.8) = -4


另见