在小数后显示有限的位数
Show a limited number of digits after the decimal
考虑以下代码:
#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
,同样的事情也会发生:结果是适合替身的数学结果的最佳近似值。所以不要害怕。试试看。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++将浮点指针值舍入为小数位数
- 如何设置数字格式以显示C 中的所有小数位数
- C 圆形为1个小数,显示2个小数
- STD :: SetPrecision不显示尾随的小数
- 我如何使其显示小数
- C++ - 为什么我的cout代码显示小数不一致
- 关于以二进制存储并显示其小数
- C++不显示小数位数的数字
- 显示带小数位数的数字,而不是整数
- 使用Float或Double类型时不显示小数
- 小数未正确显示 C++
- 如何在 8.th 小数之后擦除/不显示浮点小数
- 从二进制文件读取双精度(到类中)-小数不显示
- 在小数后显示有限的位数
- 在c++中货币计数器中没有显示小数