[英]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.