输出到精确的流浮点数

发布于 2024-12-29 12:54:40 字数 622 浏览 1 评论 0原文

我的浮点数精度有问题:

int main(void) {
  double b = 106.829599;
  float a = b;
  std::cerr << std::setprecision(6) << "a = " << a << "; b = " << b << std::endl;
  std::cerr << std::setprecision(7) << "a = " << a << "; b = " << b << std::endl;
}

结果是:

a = 106.83; b = 106.83

a = 106.8296; b = 106.8296

所以,我的问题是为什么第一行中的数字如此短(我期望看到 106.829)

gcc 4.1.2,我也在 LWS

I have a problem with float numbers precision:

int main(void) {
  double b = 106.829599;
  float a = b;
  std::cerr << std::setprecision(6) << "a = " << a << "; b = " << b << std::endl;
  std::cerr << std::setprecision(7) << "a = " << a << "; b = " << b << std::endl;
}

result is:

a = 106.83; b = 106.83

a = 106.8296; b = 106.8296

So, my question is why numbers in first line are so short (I was expecting to see 106.829)

gcc 4.1.2, also I made a test at LWS

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不语却知心 2025-01-05 12:54:40

实际上,106.829599 四舍五入到 6 位数字(3 位小数)是 106.830,由于 set precision 只是一个最大值。

小数精度决定了最大位数
写在插入操作上以表达浮点值。

您可能需要将 set precision 与 fixed 结合起来。

Actually, 106.829599 rounded to 6 digits (3 decimals) is 106.830, which is displayed as 106.83 since 6 digits precision given to setprecision is only a maximum value.

The decimal precision determines the maximum number of digits to be
written on insertion operations to express floating-point values.

What you may be looking for is combining setprecision with fixed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文