我想以十进制表示法以完全精度打印双打(但在数字的末尾没有额外的零)。在C ++中我可以使用:
std::setprecision(20);
cout << d; // Here d is a double
使用printf的等效C代码是什么?
答案 0 :(得分:10)
您可以使用“%。20g”说明符。 g是IMHO通常比f更好,因为它不打印尾随零,并且合理地处理大/小值(改为e格式)。
另请注意,对于“g”说明符,精度(本例中为“20”)指定有效位数,而不是小数点后的位数。
答案 1 :(得分:7)
格式通常为:%[flags][width][.precision][length]specifier
,例如%.20f
如果传入.*
而不是.20
,则可以在小数值之前的运行时传递任意精度。
注意:您也可以使用g
,但是请注意,在某些情况下,结果会有所不同(f
和g
之间 - 由于这种方式精度被解释。)
但主要的问题是你需要什么样的精度? (双/浮动是不精确的)......
答案 2 :(得分:4)
使用:
printf("%.20f", d);
那应该有用。
取自an online doc,更通用的格式为:
%[flags][width][.precision][length]specifier
浏览the link,了解格式中的每个令牌。