C++ 为什么不能删除浮点数的尾随零
所以我有这个密码C++ 为什么不能删除浮点数的尾随零,c++,C++,所以我有这个密码 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; } 我不明白的是,尽管我已经指定了,为什么不能删除零呢 在初始化过
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.000==1
例如,Python执行的类型的行为与您想要的一样。希望您的代码打印这些尾随的零与希望它打印
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
)以某种方式格式化输出。,尽管我在“不,您没有”中指定了它们。在编译时,1.000
与1.0
或1.00000000000000000
@rahul完全相同,您似乎对数据表示以及如何将其转换为人类可读文本有严重的误解。哈哈,不,不,我只是想知道是否有具体原因,看一下cout的输出,你不知道它是float、int还是double。我知道float、int、有符号数或无符号数是如何存储在内存中的,所以这就是你确定的原因?是的,在c++11标准中看到python和auto关键字后,我想到了这个问题。我明白了,但你能避免讽刺吗,我在问题中明确表示,这没有任何区别,我只是想知道文档中是否有关于这方面的内容
1.002
1