[英]why does cout remove the trailing zeroes for floating point numbers
所以我有这个代码
template <typename T, typename T2>
void print (const T& a, const T2& b)
{
cout << a<<endl<<b<<endl ;
}
int main(){
float i=1.002;
float j=1.000;
print(i,j);
return 0;
}
输出是
1.002
1
我不明白的是为什么 cout 删除零,尽管我在初始化过程中指定了它们,我知道它不会有任何区别,但我只是好奇它为什么会发生。
1.000 == 1
。期望您的代码打印那些尾随零与期望它打印5.0 - 4.0
没有什么不同,因为您将变量初始化为float j = 5.0 - 4.0;
.
从浮点表示的角度来看,没有“我在初始化期间指定了尾随零”这样的事情。 浮点数不是字符串。 他们是数字。 并且有无数种不同的方式可以将相同的数字表示为程序文本中一系列人类可读的字符。 在程序的源代码中, 1.000
与1.00
和0.1e1
相同 - 它们都代表相同的数字。
这意味着当需要将浮点数转换回cout
的文本表示时,库将不知道(也不会关心)您最初使用的文本类型。 您可以通过更改精度、宽度和其他格式详细信息(如使用科学格式等)来影响文本输出,但没有“按照我在源代码中编写的方式输出”这样的东西。
为什么会打印1.000
而不是1.0000000000000000
? 这两个数字在内存中是完全相同的位。 (换句话说,浮点值以非常特定的格式存储为 32 位。无论是 1.0 还是 -59.12391,它都是内存中某处的 32 位数据。)
如果您希望以某种方式打印它,请使用诸如setw()
(不要忘记#include<iomanip>
)之类的格式说明符以某种方式格式化您的cout
输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.