c++中如何精确输出的位数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中如何精确输出的位数?相关的知识,希望对你有一定的参考价值。

程序是这个小程序,要求输出精确到小数点后两位数,输入1,输出2,6.28,3.14 怎样表达呢
# include <iostream>
using namespace std;
double const PI=3.1415926;
int main()

int r;
cin>>r;
cout<<PI*r*r<<endl;
return 0;

在C++中,要实现这个功能,就要用到std命名空间中常用于流的控制符,这里通常要用到setprecision()函数,可以通过这个函数控制小数点后面位数。

还要注意的是,使用它需要加入头文件<iomanip>,这个头文件也好记。io是指in,out,输入输出流,manip是操作的缩写,所以iomanip里面全是输入输出流的操作。

代码示例如下:

#include <iostream>

#include <fstream>

#include <iomanip>

//用setprecision(n)设置精度,其中n表示精确到小数点后n位

using namespace std;

void main()

double aa = 10;

cout<<"     12345.0普通输出为:"<<12345.0<<endl;//输出12345

cout<<fixed<<setprecision(8)<<"          10保留8位有效数字输出为:"<<aa<<endl;

//fixed:表示普通方式输出,不采用科学计数法。fixed也可以放在setprecision(n)后面

cout<<"     12345.0保留8位有效数字输出为:"<<12345.0<<endl;

cout<<fixed<<setprecision(2)<<"    -123.456保留2位有效数字输出为:"<<-123.456<<endl;

cout << setprecision (4); // 精度

cout.setf(ios::fixed,ios::floatfield); // 定点格式

cout << "123.45678901保留4位有效数字输出为:"<< 123.45678901<<endl;

printf("     %2.4f保留2位有效数字输出为:%2.2f\\n",11.1191,11.1191);

system("pause");

扩展资料:

编译 & 执行 C++ 程序方法:

1、打开vs2010,选择"visual c++开发设置",然后点击"启动Visual Studio"。

2、"Visual Studio"选择默认环境设置。

3、进入"Visual Studio"后点击新建项目。

4、在弹出窗口选择 Visual C++标签下的空项目,输入名称以及保存位置。

5、在左侧的"解决方案资源管理器"中,选择"源文件"右击,然后选择"添加"->"新建项"。

6、在弹出窗口中,选择"C++文件(.cpp)",输入文件名称,单击"添加"。

7、现在输入具体的代码,例如输入简单的Hello World程序。

8、依次单击"调试"->"开始执行(不调试)"或按Ctrl+F5开始运行。

参考技术A

在C++中,要实现这个功能,就要用到std命名空间中常用于流的控制符,这里通常要用到setprecision()函数,可以通过这个函数控制小数点后面位数。

还要注意的是,使用它需要加入头文件<iomanip>,这个头文件也好记。io是指in,out,输入输出流,manip是操作的缩写,所以iomanip里面全是输入输出流的操作。

代码示例如下:

#include <iostream>

#include <fstream>

#include <iomanip>

//用setprecision(n)设置精度,其中n表示精确到小数点后n位

using namespace std;

void main()

double aa = 10;

cout<<"     12345.0普通输出为:"<<12345.0<<endl;//输出12345

cout<<fixed<<setprecision(8)<<"          10保留8位有效数字输出为:"<<aa<<endl;

//fixed:表示普通方式输出,不采用科学计数法。fixed也可以放在setprecision(n)后面

cout<<"     12345.0保留8位有效数字输出为:"<<12345.0<<endl;

cout<<fixed<<setprecision(2)<<"    -123.456保留2位有效数字输出为:"<<-123.456<<endl;

cout << setprecision (4); // 精度

cout.setf(ios::fixed,ios::floatfield); // 定点格式

cout << "123.45678901保留4位有效数字输出为:"<< 123.45678901<<endl;

printf("     %2.4f保留2位有效数字输出为:%2.2f\\n",11.1191,11.1191);

system("pause");

扩展资料:

编译 & 执行 C++ 程序方法:

1、打开vs2010,选择"visual c++开发设置",然后点击"启动Visual Studio"。

2、"Visual Studio"选择默认环境设置。

3、进入"Visual Studio"后点击新建项目。

4、在弹出窗口选择 Visual C++标签下的空项目,输入名称以及保存位置。

5、在左侧的"解决方案资源管理器"中,选择"源文件"右击,然后选择"添加"->"新建项"。

6、在弹出窗口中,选择"C++文件(.cpp)",输入文件名称,单击"添加"。

7、现在输入具体的代码,例如输入简单的Hello World程序。

8、依次单击"调试"->"开始执行(不调试)"或按Ctrl+F5开始运行。

参考技术B 头文件<iomanip>
setprecision(n) 函数
如:
#include<iostream>
#include<iomanip>
using namespace std;
int main()/*定义返回值为整型的 main主函数*/

float f;/*将f强制类型转换为float型*/
cin>>f;/*需要定义的量*/
cout<<setprecision(2)<<f/3<<endl;
return 0;
参考技术C float f1 = 23.3232;

float f2 = 1.9 + 8.0 / 9.0;

cout << "f1 = " << f1 << endl;

cout << "f2 = " << f2 << endl;

// 设置精度为2

cout.precision(2);

cout << "f1 = " << f1 << endl;

cout << "f2 = " << f2 << endl;

// 解除设定

cout.precision();

cout << endl << endl;

参考资料:http://blog.csdn.net/LuoChonG1987/archive/2008/12/16/3531957.aspx

参考技术D 头文件<iomanip>
setprecision(n)
函数
如:
#include<iostream>
#include<iomanip>
using
namespace
std;
int
main()/*定义返回值为整型的
main主函数*/

float
f;/*将f强制类型转换为float型*/
cin>>f;/*需要定义的量*/
cout<<setprecision(2)<<f/3<<endl;
return
0;

如何获得非常精确的经过时间 C++

【中文标题】如何获得非常精确的经过时间 C++【英文标题】:How get very precise elapsed time C++ 【发布时间】:2017-02-27 13:04:02 【问题描述】:

我在 Ubuntu 上运行我的代码,我需要获取我的程序中某个函数的经过时间。我需要一个非常准确的时间,比如纳秒或至少微秒。

我读过chrono.h,但它使用系统时间,我更喜欢使用 CPU 时间。

有没有办法做到这一点,并具有这种粒度(纳秒)?

【问题讨论】:

***.com/a/13666742/1870760 "如果你想要 CPU 时间,但也想要 提供的好处,你应该实现一个符合标准中概述的时钟概念的时钟类型,它提供CPU 时间,可能在内部使用 std::clock() 实现。" the high-resolution clock 怎么样? 这里还有一些内容:***.com/questions/275004/… @GillBates std::clock 的问题在于,虽然它在标准中,但它在主要平台中的工作方式并不相同(Windows 基于挂钟的结果)。在 POSIX 系统上,还有更高分辨率的系统特定时钟。 @JoachimPileborg 确实,但他们都没有像 OP 要求的那样承诺 CPU 时钟时间。 【参考方案1】:

std::chrono 确实有 high_resolution_clock,但请记住精度受处理器限制。

如果你想使用 libc 中的函数目录,你可以使用gettimeofday,但和以前一样,不能保证这将是纳秒级的。(这只是微秒级的精度)

【讨论】:

此外,由于任何时间查询都涉及内核调用,因此进入和退出内核模式所损失的时间可能会损失足够的纳秒时间来进行任何纳秒精度模拟。 +1 high_resolution_clock 应该是要走的路。但不能保证具有纳秒级分辨率。它应该只是系统中最高分辨率的时钟。如果您想绝对确定您将不得不查看您的操作系统测量时间的可能性(例如 Windows 上的 QueryPerformanceFrequency/Counter)【参考方案2】:

时钟的可实现精度是不同硬件/操作系统的属性之一,它仍然泄漏到几乎所有语言中,老实说,在同样的情况下,我发现自己构建了一个足够好的抽象在您的情况下,通常是唯一的选择。

话虽如此,我会避免使用 STL 进行高精度计时。由于它是一个没有真正实现的库标准,它必须创建一个抽象,这意味着:

使用最小公分母 通过平台相关行为泄露硬件/操作系统细节

在第二种情况下,如果您想要统一的行为,您基本上会回到您开始的地方。如果您可以承受可能的精度损失或标准时钟的偏差,那么请务必使用它。时钟既坚硬又微妙。

如果您知道您的目标环境,您可以按照老式的方式选择合适的时钟 (#ifdef PLATFORM_ID...),例如clock_gettime(), QPC),并实现你能得到的最精确的抽象。当然,您会受到 STL 必须做出的相同选择的限制,但通过减少平台集,您通常可以提高对 lcd 的要求。

如果您需要一种更理论的方法来说服自己相信这个论点,您可以考虑具有最大精度的时钟集,以及对当前时间的访问序列。对于以均匀步长均匀推进的时钟,如果两次访问发生的速度快于一个时钟的最大精度,但慢于另一个时钟的最大精度,则必然会得到不同的行为。另一方面,如果您确保两次访问至少是最慢时钟的最大精度,则行为是相同的。现在当然真正的时钟不是均匀地推进(时钟漂移),也不是单位步长。

【讨论】:

【参考方案3】:

虽然有一个标准函数应该返回 CPU 时间 (std::clock),但实际上没有可移植的方法来做到这一点。

在 POSIX 系统(Linux 试图成为)上,std::clock 应该做正确的事情。如果您想让您的应用程序可移植,请不要期望它在非 POSIX 平台上也能正常工作。

std::clock 返回的值也是近似值,精度和分辨率取决于系统。

【讨论】:

在 posix 系统上(可能适用于 Ubuntu)CLOCKS_PER_SEC 是 1000000,这意味着时钟只有微秒的分辨率。

以上是关于c++中如何精确输出的位数?的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何控制小数位数

JAVA如何将浮点数输出为指定位数的科学计数法?

c语言如何让输出结果精确到两位小数

C++中,如何保留指定的小数位,不是COUT输出~

C++数字按指定的位数输出

C++数字按指定的位数输出