作者Mercury0625 (水星)
看板C_and_CPP
標題[問題] 關於數值輸出及double宣告的問題
時間Thu Mar 24 16:06:05 2011
抱歉又是一個新手的問題......
關於double宣告變數,課本說有效位數15位,是代表整數+小數點+小數位共15位?
還是有包含指數部分?
以下為簡單程式碼(省略開頭)
double a = 1.23456789e+308;
cout<<b;
結果是1.23457e+308
為什麼會四捨五入了?如果宣告是float我還能理解........
再來下一個程式碼
double a = 1.234567;
cout<<"12345678901234567890"<<endl;
cout.precision(8);
cout<<a<<endl;
cout.width(20);
cout.setf(ios::scirntific,ios::floatield);
cout<<a<<endl;
結果
12345678901234567890
1.234567
1.23456700e+000
後面那個00怎出來的呢@@?依照上一個程式碼,後面有四捨五入但這個沒有
跟ios::scirntific,ios::floatield有關係嗎?想很久不懂
上學期計概太混,結果這個看不懂 .....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.132.54
※ 編輯: Mercury0625 來自: 140.116.132.54 (03/24 16:07)
→ danielguo:指定了 ios::scientific 就是用科學記數法, 才會有 e+00 03/24 17:28
→ danielguo:第一個例子, 你先 cout.precision 設好就可以全顯示啦 03/24 17:32
→ danielguo:有效位數是二進位換算的, 53 bits 約 15.955 個數字 03/24 17:34
推 tropical72:原 po 該先讀讀 IEEE754,除了最小正數、最大負數有出入 03/24 18:08
→ tropical72:外,其餘與 C/C++ 儲存方式並無過大差異。 03/24 18:09
→ Mercury0625:回D大,我的疑問是小數點後的00,不是科學記號@@ 03/24 18:26
→ Mercury0625:就是為什麼範例一會四捨五入,但範例二多出00 03/24 18:26
推 danielguo:你用 precision(8), 輸出 1.234567, 不到八位當然就補零 03/25 01:01
→ danielguo:你把 precision(8) 改成 50 就知道了 03/25 01:03