不使用流设置double的精度(ios_base :: precision)

pro*_*oob 6 c++ precision double

有没有办法在不使用流的情况下执行此操作?例如,像这样:

double a = 6.352356663353535;
double b = a.precision(5);
Run Code Online (Sandbox Code Playgroud)

代替:

double a = 6.352356663353535;
std::cout.precision(5);
std::cout << a << std::endl;
Run Code Online (Sandbox Code Playgroud)

我是C++的新手,我很好奇.提前致谢.

Phi*_*gan 5

考虑到@john,@ Konrad和@ KennyTM的建议,我修改了代码.我检查它是否适用于负数.

#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
   double a = 6.352356663353535;
   double  intpart;
   double fractpart = modf (a, &intpart);
   fractpart  = roundf(fractpart * 100000.0)/100000.0; // Round to 5 decimal places
   double b = intpart + fractpart;
   printf("%.5lf", b);
}
Run Code Online (Sandbox Code Playgroud)

输出

6.35236
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于C++:请不要在答案中使用遗留标题. (3认同)

Kon*_*lph 5

doubles几乎普遍实现为IEEE浮点数.它们的精度仅取决于数字大小(在double" 双精度浮点数 "的缩写中,它是53位).无法手动设置浮点数的精度.

显示精度总是输出格式的特性,从未的数目.不要试图通过舍入来改变数字,操作毫无意义.除显示之外,您不需要降低数字的精度.