用C ++打印小数位

时间:2015-09-14 12:18:19

标签: c++

我是编程的新手,所以请简单回答。 我正在尝试打印一个双。该程序要求用户输入尽可能多的pi数字,然后它应该打印回给他。但它总是打印回小数点后6位。我需要它来打印最初放入的小数位数。所以3.14是小数,而3.141592654是9.所以它打印放入的内容。

4 个答案:

答案 0 :(得分:4)

您需要std::fixed后跟std::precision

的组合

像这样:

  double f =3.14159;
  std::cout << std::fixed;
  std::cout << std::setprecision(5) << f << '\n'; // prints 5 decimals
  std::cout << std::setprecision(9) << f << '\n'; // prints 9 decimals

现在需要根据您获得的输入计算作为参数传递给std::setprecision()的内容。

答案 1 :(得分:3)

数字是数字,而不是字符串。它们的实际精度由其类型(floatdouble等)决定。

你不能记得&#34;最初提供的逻辑精度,除非您将输入作为字符串,自己计算精度,然后转换为数字。

然后使用格式化选项在输出中重现该精度级别。

或者,只需坚持使用琴弦。

答案 2 :(得分:2)

仅针对此特定情况(比较输入的pi的精确度),使用std::string而不是双精度。如果知道数千个数字的人使用您的程序,则双精度浮点变量将不足以进行比较。您还必须将参考pi存储为字符串。

顺便说一句,通过这种方法,您将不再需要记住输入的小数位数。

答案 3 :(得分:0)

您可能想要调查数字的十进制和二进制表示之间的差异。

您的用户输入十进制表示,即每个符号代表0到9之间的数字。

另一方面,double是二进制表示。

某些数字可以用十进制表示来表示,但在二进制表示中没有等价物。例如,你不能用有限数量的二进制符号表示0.3。

这就是为什么你应该将输入保持为十进制,例如使用字符串。