【问题标题】:Saving float and double precision in C++ during cin/cout and scanf/printf在 cin/cout 和 scanf/printf 期间在 C++ 中保存浮点和双精度
【发布时间】:2016-09-29 20:12:30
【问题描述】:

我想从标准输入读取浮点数和双精度数并保存其精度(浮点数后完全相同的数字)并能够按原样输出(cout/printf)。这样做最方便(也是最简单的方法)是什么? 谢谢!

【问题讨论】:

  • 由于浮点/双精度不是无限精度,唯一可靠的方法是将其作为字符串读入,并与转换后的浮点/双精度保持原始字符串。
  • 这是不可能的。原因很明显 - 在标准输入/标准输出中,浮点数表示为十进制数(这是标准的要求)。 C 或 C++ 标准没有指定浮点数的内部表示,因此不可能编写从字符串到浮点数/双精度和向后的可移植转换。在一般情况下,即使使用数字的事实标准表示也不允许十进制到二进制的可逆转换。举例说明:尝试将 1/3 转换为十进制表示法并返回,保持精度。

标签: printf scanf cout cin floating-accuracy


【解决方案1】:
float f;
cin >> f;
cout << f;

【讨论】:

  • 但是使用双 12345.56789 相同的方法不起作用。双 d;辛 >> d; cout
【解决方案2】:

使用setprecision

解决办法

cout<<setprecision(the precision you want to set here)<<variablename;

例如。如果要将变量 var 的输出精度设置为 5,请像这样使用它:

cout<<setprecision(5)<<var;

setprecision 是一个操纵者。了解更多关于机械手here

它设置要使用的小数精度

格式化输出操作的浮点值。 表现得好像使用 n 作为参数调用成员精度 它作为操纵器插入/提取的流(它可以是 在输入流或输出流上插入/提取)。

这是一个操纵器,在标头&lt;iomanip&gt;中声明

【讨论】:

    【解决方案3】:

    由于输入的精度未知,最简单的方法是将它们读取为字符串,而不是双精度/浮点数。

    如果需要浮点值,则需要简单的字符串到双精度转换。

    任何其他方法都可能会失败,因为您依赖于标准库完成的从字符串到浮点的不完美转换。

    后者无法区分0.4和0.40。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 2011-12-08
      • 2017-06-02
      • 2011-10-24
      • 2018-02-23
      • 2019-05-22
      • 2018-06-04
      相关资源
      最近更新 更多