[問題] 關於數值輸出及double宣告的問題

看板C_and_CPP (C/C++)作者 (水星)時間15年前 (2011/03/24 16:06), 編輯推噓2(2010)
留言12則, 4人參與, 最新討論串1/2 (看更多)
抱歉又是一個新手的問題...... 關於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)

03/24 17:28, , 1F
指定了 ios::scientific 就是用科學記數法, 才會有 e+00
03/24 17:28, 1F

03/24 17:28, , 2F
03/24 17:28, 2F

03/24 17:32, , 3F
第一個例子, 你先 cout.precision 設好就可以全顯示啦
03/24 17:32, 3F

03/24 17:34, , 4F
有效位數是二進位換算的, 53 bits 約 15.955 個數字
03/24 17:34, 4F

03/24 17:37, , 5F
指數不算, 見 http://goo.gl/ORIXG
03/24 17:37, 5F

03/24 18:08, , 6F
原 po 該先讀讀 IEEE754,除了最小正數、最大負數有出入
03/24 18:08, 6F

03/24 18:09, , 7F
外,其餘與 C/C++ 儲存方式並無過大差異。
03/24 18:09, 7F

03/24 18:26, , 8F
回D大,我的疑問是小數點後的00,不是科學記號@@
03/24 18:26, 8F

03/24 18:26, , 9F
就是為什麼範例一會四捨五入,但範例二多出00
03/24 18:26, 9F

03/25 01:01, , 11F
你用 precision(8), 輸出 1.234567, 不到八位當然就補零
03/25 01:01, 11F

03/25 01:03, , 12F
你把 precision(8) 改成 50 就知道了
03/25 01:03, 12F
文章代碼(AID): #1DYljm6g (C_and_CPP)
文章代碼(AID): #1DYljm6g (C_and_CPP)