在小数后显示有限的位数

Show a limited number of digits after the decimal

本文关键字:小数 显示      更新时间:2023-10-16

考虑以下代码:

#include <iostream>
using namespace std;
int main ()
{
  int a;
  double b;
  cout << "Enter a number to be divided by three" << endl;
  cin >> a;
  b = a / 3.0;
  cout << "The result of this is:" << b << endl;
  return 0;
}

如何设置小数点后要存储的变量数量?这包括20位以上的数字。

您似乎认为1/3的结果答案将是0.33333333333...[to infinity]

这是不对的。浮点数字的精度有限,结果值只能输出大约20位数字,而不是无限位数。

变量b将具有double类型的变量所能处理的所有精度。没有简单的方法可以限制这一点

但是,如果您只想限制显示的数量,您可以限制cout:显示的输出

cout << fixed << setprecision(4) << b << endl;
  • fixed将使输出使用定点表示法(另一个选项是scientific)。

  • setprecision将控制要显示的最大位数。

这种情况下的输出应该是:

0.333

总共4位(小数点前1位,小数点后3位)。

double是一种固定大小的类型(在大多数系统上为8字节)。所以它只存储一定精度的数字。没有必要担心"无限除法"(从1/3.0没有有限十进制表示的意义上讲)。

编辑(基于以下评论)

如果你真的在寻找一个任意精度的实数表示,你必须使用一个库,比如Boost.Multiprecision.

a/3 = b应为b = (double)a/3。它只分开一次!正如iamnotmaynard所说:你必须打印b而不是a:cout << "The result of this is:"<< b << endl;

在数学中,1/3有无限的十进制表示。在计算机中,没有无限的表示。1/3除以整数,得到的结果是一个整数;由于整数不包含小数部分,因此结果为0。如果你使用替身1.0/3.0,同样的事情也会发生:结果是适合替身的数学结果的最佳近似值。所以不要害怕。试试看。