[問題] 請問 cout 與 printf 的變換

看板C_and_CPP (C/C++)作者時間15年前 (2010/08/18 21:09), 編輯推噓2(2016)
留言18則, 5人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 請問一下, printf("%3.5f", x ); 要如何變換成 cout 格式? 我知道 %3f 可用 setw(3) 來解決, 但是 .5f 輸出小數部分該如何解決呢?(已解決,感激) 但剛剛試了一下 setprecision, 發現這居然是 5 捨 6 入,感覺有點奇怪。 有正常 4 捨 5 入的嘛? 另外,若是我想用 cout 輸出不同格式時, 例如在 printf 中的 %d %f %x %c %s 等, 又該怎麼轉換呢?謝謝指教! 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.190.61

08/18 21:13, , 1F
研究一下 iomanip 這個標頭檔
08/18 21:13, 1F

08/18 21:17, , 2F
setprecition
08/18 21:17, 2F

08/18 21:29, , 3F
感謝兩位!但有新問題,為啥setprecition是5捨6入的?
08/18 21:29, 3F

08/18 21:36, , 4F
是四捨五入, 你是測什麼輸出什麼?
08/18 21:36, 4F

08/18 21:41, , 5F
我用setprecision(1)與setprecision(2)去做比對的
08/18 21:41, 5F

08/18 21:44, , 6F
然後用自己算的式子,發現有 0.1<->0.15, 0.2<->0.16
08/18 21:44, 6F

08/18 21:44, , 7F
這種關係,讓我覺得好像是5捨6入
08/18 21:44, 7F
※ 編輯: Cidolfas 來自: 219.85.190.61 (08/18 21:45)

08/18 22:00, , 8F
轉成2進位表示看看吧...
08/18 22:00, 8F

08/18 23:34, , 9F
應該不是五捨六入, 是四捨六入五成雙?
08/18 23:34, 9F

08/18 23:40, , 10F
五成雙是指啥啊?
08/18 23:40, 10F

08/18 23:53, , 11F
這純粹只是浮點數儲存的誤差問題, 譬如0.15 你讓他精
08/18 23:53, 11F

08/18 23:54, , 12F
確17位就能看出他根本不是0.15, 轉成二進位表示再加上
08/18 23:54, 12F

08/18 23:54, , 13F
計概有的基本知識, 我想應該不會有太大疑問才是
08/18 23:54, 13F

08/18 23:56, , 14F
IEEE 754 是用浮點數必須知道的儲存架構
08/18 23:56, 14F

08/19 00:02, , 15F
四捨六入五成雙這個規則記得是要用二進位看算最後的
08/19 00:02, 15F

08/19 00:03, , 16F
mantisa時才使用的, 而不是在十進位的地方用喔:)
08/19 00:03, 16F

08/19 00:03, , 17F
這個看起來應該是樓上love大說的精確度問題:)
08/19 00:03, 17F

08/19 00:07, , 18F
感謝各位
08/19 00:07, 18F
文章代碼(AID): #1CQzkX6G (C_and_CPP)
文章代碼(AID): #1CQzkX6G (C_and_CPP)