[問題] 新手關於資料型態轉換問題

看板C_and_CPP (C/C++)作者 (小犬)時間13年前 (2012/08/28 03:25), 編輯推噓1(1016)
留言17則, 6人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++ 程式碼(Code):(請善用置底文網頁, 記得排版) #include<cstdio> #include<cstdlib> #include<math.h> using namespace std; main() { printf("正常二方(double→int)%d\n\n\n",(int)(pow(10,2))); //正常的二方 printf("十的幾次方:(double→int)\n"); for (int i=0;i<=9;i++) { printf("%-5d",i); printf ("%d\n",(int)pow(10,i)); } system("pause"); } 補充說明(Supplement): 小弟是個剛接觸C++的新手 剛剛在練習十進位轉二進位時 發現這個問題 看了置頂文有點像7和11但 我又不確定 故想上來請各位幫我解答 主要問題是在(int)pow(10,i) 如果i直接給值或是直接換成數字的話 都會顯示正常 但一碰到迴圈就會失常 不知道為什麼 剛剛試了好多遍用了很多方法 for while do-while都會出現這個問題 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.13.45

08/28 03:29, , 1F
剛剛使用線上的編譯器 顯示卻正常@@ 好奇怪喔
08/28 03:29, 1F

08/28 03:29, , 2F

08/28 04:44, , 3F
這編得過已經不錯了, 好多可以吐槽的地方...
08/28 04:44, 3F

08/28 04:45, , 4F
你至少也講一下失常是怎樣失常啊, 我們又看不到你的電腦
08/28 04:45, 4F
抱歉 我忘了說明失常的情況 http://ppt.cc/wKtt

08/28 09:38, , 5F
pow內的資料型態是什麼? pow(double,double)
08/28 09:38, 5F

08/28 09:39, , 6F
pow(float, float) 及pow(long double,long double)
08/28 09:39, 6F

08/28 09:41, , 7F
(int)(pow(10,2)) 10跟2都是int 改成10.0與2.0吧
08/28 09:41, 7F

08/28 09:42, , 8F
for回圈裡問題就來了 for(int i,...)-->i為int
08/28 09:42, 8F

08/28 09:44, , 9F
你後面寫(int)pow(10,i) pow不吃int 就出問題了
08/28 09:44, 9F

08/28 09:45, , 10F
先轉double吧
08/28 09:45, 10F
謝謝提醒 我常常會忽略掉重要的小細節 但通通改成double後還是會有相同的問題

08/28 11:14, , 11F
to樓上: 他用math.h所以只有一個pow: pow(double,double)
08/28 11:14, 11F

08/28 11:15, , 12F
pow(10,i)沒問題, compiler會做自動轉型
08/28 11:15, 12F

08/28 11:37, , 13F
pow在計算時會有精確度的問題,建議轉整數時用四捨五入...
08/28 11:37, 13F

08/28 11:38, , 14F
(int)(pow(10,i)+0.5) <-例如改成這樣
08/28 11:38, 14F

08/28 11:45, , 15F
話說我用其他編譯器都沒這問題,只能說Dev-C++有點........
08/28 11:45, 15F
我也是用DEV-c++才會有這個問題... ※ 編輯: jetswayss 來自: 122.116.13.45 (08/28 11:51) ※ 編輯: jetswayss 來自: 122.116.13.45 (08/28 11:54)

08/28 12:13, , 16F
http://ideone.com/Y3bh5 個人認為改成這樣比較像C++....
08/28 12:13, 16F

08/29 02:23, , 17F
這到底是什麼巫術 會什麼會少 1 !!!
08/29 02:23, 17F
文章代碼(AID): #1GEycj05 (C_and_CPP)
文章代碼(AID): #1GEycj05 (C_and_CPP)