使用 stringstream 打印四舍五入的浮点数

Posted

技术标签:

【中文标题】使用 stringstream 打印四舍五入的浮点数【英文标题】:using stringstream to print a rounded floating point number 【发布时间】:2011-10-12 02:26:07 【问题描述】:

我有浮点变量“lmin”和“lmax”。我希望只显示 4 位有效数字。我目前正在使用我在网上找到的表格...

string textout;
stringstream ss;

ss << lmin;
textout = ss.str();
output(-0.5, -0.875, textout);

ss.str("");
ss << lmax;
textout = ss.str();
output(0.2, -0.875, textout);

其中“输出”只是我编写的一个函数,用于解析字符串并将其打印到屏幕上。重要的一点是,我如何只将 lmin 和 lmax 的 ROUNDED 版本打印到 ss?

【问题讨论】:

Possible duplicate 【参考方案1】:

使用std::setprecision 指定小数点后的位数。

#include <sstream>
#include <iostream>
#include <iomanip>

int main()

  double d = 12.3456789;
  std::stringstream ss;

  ss << std::fixed << std::setprecision( 4 ) << d;

  std::cout << ss.str() << std::endl;

输出:

12.3457

【讨论】:

虽然这几乎完美地回答了我的问题,但我要把信封推得更远一点,问是否有一种简单的方法可以将其打印为科学记数法?如果我有 12.3457,我只想要 4 位,不一定是小数点后 4 位,所以我想要 12.34(或等效地,1.234e+1) @Laurbert515 去掉std::fixed 部分,默认是科学的:)。或者你可以明确地使用std::scientific @Laurbert515 似乎我错了默认部分,对不起。 ideone.com/a07Z0【参考方案2】:

在插入输出之前只需使用ss.precision( 4 )ss &lt;&lt; std::setprecision( 4 )

【讨论】:

以上是关于使用 stringstream 打印四舍五入的浮点数的主要内容,如果未能解决你的问题,请参考以下文章

不使用 SetRoundingMode() 截断浮点值

如何在 C++ 中设置浮点变量的精度

使用 stringstream 打印数字,但当我包含时,例如 1.3067d,但它仍然打印 1.3067

Postgres / Rails Active Record - 查询四舍五入的浮点值

如何将(四舍五入)浮点数数组更改为字符串数组python

c语言中将一个浮点型赋值给整型时,会不会四舍五入?