使用C中的printf等效C ++ std :: setprecision(20)

时间:2011-09-13 11:45:17

标签: c++ c

我想以十进制表示法以完全精度打印双打(但在数字的末尾没有额外的零)。在C ++中我可以使用:

std::setprecision(20);
cout << d; // Here d is a double

使用printf的等效C代码是什么?

3 个答案:

答案 0 :(得分:10)

您可以使用“%。20g”说明符。 g是IMHO通常比f更好,因为它不打印尾随零,并且合理地处理大/小值(改为e格式)。

另请注意,对于“g”说明符,精度(本例中为“20”)指定有效位数,而不是小数点后的位数。

答案 1 :(得分:7)

格式通常为:%[flags][width][.precision][length]specifier,例如%.20f

如果传入.*而不是.20,则可以在小数值之前的运行时传递任意精度。

注意:您也可以使用g,但是请注意,在某些情况下,结果会有所不同(fg之间 - 由于这种方式精度被解释。)

但主要的问题是你需要什么样的精度? (双/浮动是不精确的)......

答案 2 :(得分:4)

使用:

printf("%.20f", d);

那应该有用。

取自an online doc,更通用的格式为:

%[flags][width][.precision][length]specifier 

浏览the link,了解格式中的每个令牌。