首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c++中,**std::set精度()*没有**std::fixed*的作用是什么?

在c++中,**std::set精度()*没有**std::fixed*的作用是什么?
EN

Stack Overflow用户
提问于 2017-07-13 14:56:07
回答 4查看 8.3K关注 0票数 10

如教程http://www.cplusplus.com/reference/iomanip/setprecision/所示

代码语言:javascript
运行
复制
// setprecision example
#include <iostream>     // std::cout, std::fixed
#include <iomanip>      // std::setprecision

int main () {
  double f =3.14159;
  std::cout << std::setprecision(5) << f << '\n';  // prints 3.1416 and not 3.141459 why 
  std::cout << std::setprecision(9) << f << '\n';
  std::cout << std::fixed;
  std::cout << std::setprecision(5) << f << '\n';
  std::cout << std::setprecision(9) << f << '\n';
  return 0;
}

std::cout << std::<<(5)不打印5位十进制数字,但是在设置std::fixed后,set精度按预期工作。那是为什么?

std::setprecision()在没有std::的情况下扮演什么角色?

EN

回答 4

Stack Overflow用户

发布于 2017-07-13 15:04:09

根据base/precision,精度决定打印的数字数,而不是浮点打印后的数字数:

std::ios_base::precision 管理浮点输出的精度(即生成多少位数)

这解释了四舍五入。

是的,使用std::fixed将改变浮场精度的解释。根据base/precision/

在固定符号和科学符号中,精度字段都指定小数点之后要显示多少位数,即使这包括尾随小数零。在这种情况下,小数点之前的数字与精度无关。

票数 7
EN

Stack Overflow用户

发布于 2017-07-13 15:11:44

精度的含义取决于是否使用固定的、科学的或默认的格式。对于固定格式,它是小数点之后的数字数。对于科学而言,也是如此--但在这个点之前总是有一个数字;指数被用来将小数点移到位置。对于默认格式,精度指定打印的数字总数(粗略地说,比较复杂)。

有关详细信息,请参阅http://en.cppreference.com/w/cpp/io/c/fprintf,特别是%f%e%g格式说明符的说明(相应地,对于固定的、科学的和默认的格式)。std::cout << f被指定为好像调用了printf("%.<precision><format>", f)一样(对于第一个近似,现实情况也要复杂一些,但细节与手头的问题无关),其中<precision>setprecision指定的数字,<format>feg中的一个。

票数 5
EN

Stack Overflow用户

发布于 2017-07-13 15:11:48

std::setprecision()的行为因所选格式的不同而不同。

std::fixed make std::setprecision()指小数点之后打印的数字。在将默认格式更改为std::fixed之前,设置std::defaultfloatstd::setprecision()设置要打印的数字总数,包括小数点前后的数字。

比较:

http://www.cplusplus.com/reference/ios/defaultfloat/

http://www.cplusplus.com/reference/ios/fixed/

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45084317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档