C++程序:将数字舍入到n位小数
在任何语言中编写程序时,在输出中表示数字是一项有趣且重要的任务。对于整数类型(short、long或medium)数据,很容易将数字表示为输出。对于浮点数(float或double类型),有时需要将其舍入到一定的位数。例如,如果要将52.24568表示为三位小数,则需要进行一些预处理。在本文中,我们将介绍一些技术,通过舍入将浮点数表示为一定的小数位数。
在不同的方法中,使用类似C语言的格式化字符串、使用精度参数以及使用math库中提供的round()函数非常重要。让我们逐一看看它们。并附带正确的语法和代码示例。
使用格式化字符串
在C语言中,我们使用printf()函数表示格式化打印。要使用printf()函数显示一些数据,需要预先指定格式化字符串。C++中也提供了相同的printf()函数。要将数字表示为一定的小数位数,格式化语法如下所示:
语法
printf语句的语法。
printf ( “%.<number of decimal place>f”, <floating point number> );
例如,如果要将浮点数变量NUM显示为4位小数,则语句如下:
printf ( “%.4f”, NUM );
示例
#include <iostream> using namespace std; void solve( float number) { printf ( "%.3f", number ); } int main(){ cout << "Number 45.278586 up to 3 decimal places: "; solve( 45.278586 ); }
输出
Number 45.278586 up to 3 decimal places: 45.279
在这个例子中,我们可以看到给定的数字最多有6位小数。但是我们将其显示为3位小数。舍入时,它会自动转换为最接近的值。但是,此过程有一个缺点。我们无法根据需要动态更改小数位数。为了克服这个问题,我们可以使用基于C++的setprecision()方法。
使用setprecision方法
C++有一个名为setprecision()的特殊格式化函数,用于将精度值设置为n位小数。要使用此方法,需要导入iomanip库。还需要指定我们使用的是定点小数。语法如下:
语法
setprecision()方法的定义
include <iomanip> std::cout << std::fixed; std::cout << std::setprecision( <number of decimal places> ); std::cout << The_floating_point_number;
例如,如果要将浮点数变量NUM显示为4位小数,则语句如下:
include <iomanip> std::cout << std::fixed; std::cout << std::setprecision( 4 ); std::cout << NUM;
示例
#include <iostream> #include <iomanip> using namespace std; void solve( float number, int place) { cout << fixed; cout << setprecision( place ); cout << number << endl; } int main(){ cout << "Number 45.278586 up to 3 decimal places: "; solve( 45.278586, 3); cout << "Number 45.278586 up to 4 decimal places: "; solve( 45.278586, 4); cout << "Number 45.278586 up to 5 decimal places: "; solve( 45.278586, 5); }
输出
Number 45.278586 up to 3 decimal places: 45.279 Number 45.278586 up to 4 decimal places: 45.2786 Number 45.278586 up to 5 decimal places: 45.27859
这是将数字表示为n位小数的理想方法。有时对于n=0,我们可以使用另一种方法进行舍入。这会将数字转换为整数。方法如下:
使用round()方法
‘cmath’库有一个round()方法,用于将数字转换为最接近的整数。因此,这将浮点数转换为0位小数。语法如下。
语法
使用round()方法
include <cmath> float res = round ( <floating point number> );
例如,如果要将数字45.254舍入到最接近的整数,则语句如下。
include <cmath> float res = round ( 45.254 ); std::cout << res;
示例
#include <iostream> #include <cmath> using namespace std; void solve( float number) { float res; res = round ( number ); cout << res << endl; } int main(){ cout << "Number 45.278586 to its nearest integer: "; solve( 45.278586 ); cout << "Number 89.7854 to its nearest integer: "; solve( 89.7854 ); cout << "Number -45.69 to its nearest integer: "; solve( -45.69 ); }
输出
Number 45.278586 to its nearest integer: 45 Number 89.7854 to its nearest integer: 90 Number -45.69 to its nearest integer: -46
在这个例子中,很明显,将浮点数转换为最接近的整数的合适且简单的方法是使用round()函数。此函数将数字作为参数,并返回整数等效值。在我们的示例中,有一个负数-45.69,舍入后,它变成了-46,小于此数。因此,round()方法不像floor()或ceil()。
结论
在C++中编写代码时,将浮点数表示为n位小数有几种方法。最基本的方法是使用带有格式化字符串的printf()方法。但是,对于此方法,格式字符串的小数位数无法动态更改。为了解决这个问题,C++的iomanip库提供了setprecision()方法,该方法需要指定浮点数舍入到的位数。有时需要将浮点数舍入到最接近的整数(0位小数)。在这种情况下,可以使用C++的cmath库中的round()方法。