有没有办法做到这一点不使用流? 例如,这样的事情:
double a = 6.352356663353535;
double b = a.precision(5);
代替:
double a = 6.352356663353535;
std::cout.precision(5);
std::cout << a << std::endl;
我是新的C ++和我很好奇。 提前致谢。
有没有办法做到这一点不使用流? 例如,这样的事情:
double a = 6.352356663353535;
double b = a.precision(5);
代替:
double a = 6.352356663353535;
std::cout.precision(5);
std::cout << a << std::endl;
我是新的C ++和我很好奇。 提前致谢。
double
s如上几乎普遍实施IEEE浮点数 。 其精度取决于数量大小只(在的情况下double
,这是短期的“ 双精度浮点数 ”,它是53位)。 没有手动设置浮点数的精度方式。
显示精度总是输出格式的特性,从未的数目。 不要试图通过四舍五入更改号码,操作是没有意义的。 你并不需要减少一些的精度,除了显示目的。
我已经修改了代码,考虑到@约翰,@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);
}
输出
6.35236
一个double
总是具有相同的内部精密(二进制精度最有可能53位),无论你做什么。 写出兼作十进制格式的文本,你可以控制输出的数字精度当而已。 所以,不,你不能比它的原生精密(让一旁的十进制精度)设置一个二进制双精度数与别的精度。
如果你想要的是圆一个数的小数位数给定数量,然后咨询菲利普的回答(但与约翰和康拉德在他们的评论作出当然ammendments)。 但是请注意,这不会改变底层的类型的preicision与这个数字所有计算将在二进制双精度进行。 还这样的圆形十进制数并不需要在底层二进制浮点类型完全表示。
如果你真的想进行精确的十进制算法,那么你就必须寻找提供实际的十进制浮点类型的第三方库。