[問題] double 轉 int出現的怪異失真

看板C_and_CPP作者 (有小公主就夠了)時間14年前 (2011/07/01 11:31), 編輯推噓3(306)
留言9則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) linux 問題: double x = 6.36;; int y = (int) ( x * 1000); 正確 y = 6360 卻得到 y = 6359 雖然預期 double轉整數會被砍小數部分, 可是 6360.00 怎麼砍應該還是 6360 阿@@.... 實在想不出怎樣的轉換過程造成這樣的錯誤? 先謝謝大家^^ -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.50.141

07/01 11:37, , 1F
快去膜拜13戒的第11條
07/01 11:37, 1F

07/01 11:40, , 2F
洗老師的那篇有看過了 不過還是想不出是怎麼轉換錯誤XD
07/01 11:40, 2F

07/01 11:45, , 3F
因為實際上x存的 "約" 是:6.359999999999999,已有誤差
07/01 11:45, 3F

07/01 13:04, , 4F
感謝樓上 要加上用round(x*1000)才能取的真正的整數值
07/01 13:04, 4F

07/01 15:44, , 5F
還有那位老師姓冼(ㄒㄧㄢˇ)....(雖然打注音好像要打ㄕㄥˇ)
07/01 15:44, 5F

07/01 17:14, , 6F
我都用 (int) ( x * 1000 + .5 ) ..有什麼不良後果嗎?
07/01 17:14, 6F

07/02 21:54, , 7F
floor(360000000000000000000.0*1000 + 0.5)
07/02 21:54, 7F

07/02 21:54, , 8F
=359999999999999983222784 (在我電腦上的Double xD)
07/02 21:54, 8F

07/03 20:24, , 9F
樓上竟然會嘗試到這樣...
07/03 20:24, 9F
文章代碼(AID): #1E3J-etD (C_and_CPP)