📅  最后修改于: 2023-12-03 15:13:58.523000             🧑  作者: Mango
在C++中,有许多用于舍入浮点数的函数,其中 rint()
、fesetround()
、rintf()
、rintl()
都是非常有用的。
rint()
是一个标准库函数,用于四舍五入到最接近的整数。该函数的参数可以是任何可转换为 double
类型的整数或浮点数。
#include <cmath>
#include <iostream>
int main() {
double a = 5.5;
double b = 5.49;
double c = -5.5;
double d = -5.49;
std::cout << std::round(a) << std::endl;
std::cout << std::round(b) << std::endl;
std::cout << std::round(c) << std::endl;
std::cout << std::round(d) << std::endl;
return 0;
}
输出:
6
5
-6
-5
fesetround()
函数用于设置舍入方式。默认情况下,C++会使用 FE_TONEAREST
舍入方式,这意味着如果值恰好位于两个整数之间,则会进行四舍五入。但是,fesetround()
函数允许您选择其他舍入方式,包括:
FE_UPWARD
:向正无穷舍入。FE_DOWNWARD
:向负无穷舍入。FE_TOWARDZERO
:向零舍入。FE_TONEAREST
:最接近(默认)。#include <cmath>
#include <iostream>
#include <cfenv>
int main() {
double a = 5.5;
double b = 5.49;
double c = -5.5;
double d = -5.49;
std::cout << std::round(a) << std::endl;
fesetround(FE_UPWARD); // 设置舍入方式为向上。
std::cout << std::round(a) << std::endl;
fesetround(FE_DOWNWARD); // 设置舍入方式为向下。
std::cout << std::round(a) << std::endl;
fesetround(FE_TOWARDZERO); // 设置舍入方式为向零。
std::cout << std::round(a) << std::endl;
fesetround(FE_TONEAREST); // 设置舍入方式为四舍五入。
std::cout << std::round(a) << std::endl;
return 0;
}
输出:
6
6
5
5
6
rintf()
是 rint()
的浮点版本。
#include <cmath>
#include <iostream>
int main() {
float a = 5.5;
float b = 5.49;
float c = -5.5;
float d = -5.49;
std::cout << std::round(a) << std::endl;
std::cout << std::round(b) << std::endl;
std::cout << std::round(c) << std::endl;
std::cout << std::round(d) << std::endl;
return 0;
}
输出:
6
5
-6
-5
rintl()
是 rint()
的长整型版本。
#include <cmath>
#include <iostream>
int main() {
long double a = 5.5;
long double b = 5.49;
long double c = -5.5;
long double d = -5.49;
std::cout << std::round(a) << std::endl;
std::cout << std::round(b) << std::endl;
std::cout << std::round(c) << std::endl;
std::cout << std::round(d) << std::endl;
return 0;
}
输出:
6
5
-6
-5
可以看出,rint()
、rintf()
、rintl()
都是用于舍入浮点数的非常有用的函数。fesetround()
函数允许您选择不同的舍入方式。这些函数组合使用可以方便地处理浮点数舍入问题。