C++官网参考链接:https://cplusplus.com/reference/cmath/llrint/
函数
<cmath> <ctgmath>
llrint
C99
long long int llrint(double x);
long long int llrintf(float x);
long long int llrintl(long double x);
C++11
long long int llrint(double x);
long long int llrint(float x);
long long int llrint(long double x);
long long int llrint (T x); // additional overloads for integral types
舍入并转换为long long整数
使用fegetround指定的舍入方向将x舍入为整数值,并将其作为long long int类型的值返回。
参见lrint获得返回long int的等价函数。
C99
头文件<tgmath.h>提供了该函数的泛型类型的宏版本。
C++11
在此头文件(<cmath>)中为整型(integral types)提供了额外的重载:这些重载在计算之前有效地将x转换为double类型(定义T为任何整型(integral types))。
形参
x
将要舍入的x。
返回值
返回值x的值舍入到附近的整数,并转换为long long int类型的值。
如果舍入的值在返回类型的范围之外,则返回的值是未指定的,并且可能发生定义域错误或上溢范围错误(或者没有,取决于实现)。
如果发生定义域错误:
—math_errhandling具有MATH_ERRNO集合:全局变量errno设置为EDOM。
—math_errhandling具有MATH_ERREXCEPT集合:将引发FE_INVALID。
如果发生上溢范围错误:
—math_errhandling具有MATH_ERRNO集合:全局变量errno设置为ERANGE。
—math_errhandling具有MATH_ERREXCEPT集合:引发FE_OVERFLOW。
用例
/* llrint example */
#include <stdio.h> /* printf */
#include <fenv.h> /* fegetround, FE_* */
#include <math.h> /* llrint */
int main ()
{
printf ("rounding using ");
switch (fegetround()) {
case FE_DOWNWARD: printf ("downward"); break;
case FE_TONEAREST: printf ("to-nearest"); break;
case FE_TOWARDZERO: printf ("toward-zero"); break;
case FE_UPWARD: printf ("upward"); break;
default: printf ("unknown");
}
printf (" rounding:\n");
printf ( "llrint (2.3) = %lld\n", llrint(2.3) );
printf ( "llrint (3.8) = %lld\n", llrint(3.8) );
printf ( "llrint (-2.3) = %lld\n", llrint(-2.3) );
printf ( "llrint (-3.8) = %lld\n", llrint(-3.8) );
return 0;
}
可能的输出: