c++ - 四舍五入到最大 N 位小数

标签 c++ rounding

我知道如何像这样将四舍五入的数字打印成 N 位小数:

using namespace std;

cout << setprecision(N) << fixed;
float k = 1.23441;
cout << k;

让我们以 N = 2 为例。

这将输出 1.23,这很好,但是如果 k 是 1.0012,它将输出 1.00,我希望它输出 1。如果 k 是 1.1045,它将输出 1.10,我希望它输出 1.1,所以我想四舍五入到 2 位小数并删除不必要的零。

我该怎么做?

最佳答案

其实问题不在于setprecision,而是fixed。使用 fixed,您明确要求拥有固定数量的数字!

如果您使用 setprecision 而不使用 fixed,它将完全按照您的要求执行:

#include <iostream>
#include <iomanip>

int main() {
    double const number = 123.456789;
    for (int i = 0; i != 15; ++i) { std::cout << i << ": " << std::setprecision(i) << number << "\n"; }
    return 0;
}

output :

0: 1e+02
1: 1e+02
2: 1.2e+02
3: 123
4: 123.5
5: 123.46
6: 123.457
7: 123.4568
8: 123.45679
9: 123.456789
10: 123.456789
11: 123.456789
12: 123.456789
13: 123.456789
14: 123.456789

您可以找到关于不同模式 here 的文档:

  • 已修复
  • 科学
  • hexfloat
  • 默认 float

而你想要的是defaultfloat,顾名思义就是默认值。

关于c++ - 四舍五入到最大 N 位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23370517/

相关文章:

c# - WCF Com Interop GetRecordInfoFromGuids 返回旧格式或无效类型库

c++ - 在屏幕上绘制点

c++ - 将任意长度的 float 舍入到 n 位

c# - DateTime.AddDays 的准确性如何?

python - 将指数 float 舍入为 2 位小数

c++ - 如何使用带路径的包含文件在 Visual Studio 中构建?

c++ - 将 C++ 与 MySql 一起使用 : segmentation fault

c++ - Physx 3 的几个新手问题

php float 计算2位小数

java - "(int)Math.ceil(double)"始终返回 1,即使值大于 1