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()方法。

更新于:2022年10月17日

21K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告