如何在 C++ 中打印 6 位精度的浮点值?

How to print a float value of 6 digit precision in C++?

提问人:Nitsshukla 提问时间:1/2/2013 最后编辑:Adri C.S.Nitsshukla 更新时间:1/2/2013 访问量:4112

问:

默认情况下,我得到 4 位精度,当我使用变量的最后几位时,随机出现,例如 .setprecision(6)1/3=0.333369

C++ 十进制 精度 数字

评论

1赞 fge 1/2/2013
看起来你受到类型本身的限制,为什么不使用呢?但即使是这种类型也有局限性。floatdouble
0赞 fge 1/2/2013
@Potatoswatter IEEE 754 浮点数不是这样工作的;)
0赞 Potatoswatter 1/2/2013
@fge(评论已删除,因为内容已移至答案)是的,他们确实会产生最接近 1/3 的误差,误差将小于千万分之一。1/3.ffloat
0赞 Walter 1/2/2013
1/3是结果为 的整数除法。要获得具有正确值的 ,必须至少有一个操作数是 ,例如 。这后跟通常会打印出来(前提是其原始状态:默认为 6 位数字)。0floatfloatfloat x=1.f/3.f;std::cout<<x;0.333333std::cout

答:

4赞 Potatoswatter 1/2/2013 #1

float由于它使用 24 个二进制数字来存储数字的数字,因此精度约为 7 个十进制数字。就输出而言,可以满足您的所有要求。setprecision(6)

您可能会失去精度,例如,通过减去两个具有相似值的数字并打印结果。快速的解决方案是更改要使用的计算 或 。但是,要保证浮点结果的精度,您需要了解 FP 的工作原理并分析公式的计算方式。doublelong double

了解每个计算机科学家都应该了解的浮点运算知识。