看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
jetswayss:剛剛使用線上的編譯器 顯示卻正常@@ 好奇怪喔 08/28 03:29
jetswayss:http://ideone.com/66q7P 08/28 03:29
uranusjr:這編得過已經不錯了, 好多可以吐槽的地方... 08/28 04:44
uranusjr:你至少也講一下失常是怎樣失常啊, 我們又看不到你的電腦 08/28 04:45
抱歉 我忘了說明失常的情況 http://ppt.cc/wKtt
wope:pow內的資料型態是什麼? pow(double,double) 08/28 09:38
wope:pow(float, float) 及pow(long double,long double) 08/28 09:39
wope:(int)(pow(10,2)) 10跟2都是int 改成10.0與2.0吧 08/28 09:41
wope:for回圈裡問題就來了 for(int i,...)-->i為int 08/28 09:42
wope:你後面寫(int)pow(10,i) pow不吃int 就出問題了 08/28 09:44
wope:先轉double吧 08/28 09:45
謝謝提醒 我常常會忽略掉重要的小細節 但通通改成double後還是會有相同的問題
Fenikso:to樓上: 他用math.h所以只有一個pow: pow(double,double) 08/28 11:14
Fenikso:pow(10,i)沒問題, compiler會做自動轉型 08/28 11:15
TsinTa:pow在計算時會有精確度的問題,建議轉整數時用四捨五入... 08/28 11:37
TsinTa:(int)(pow(10,i)+0.5) <-例如改成這樣 08/28 11:38
TsinTa:話說我用其他編譯器都沒這問題,只能說Dev-C++有點........ 08/28 11:45
我也是用DEV-c++才會有這個問題... ※ 編輯: jetswayss 來自: 122.116.13.45 (08/28 11:51) ※ 編輯: jetswayss 來自: 122.116.13.45 (08/28 11:54)
TsinTa:http://ideone.com/Y3bh5 個人認為改成這樣比較像C++.... 08/28 12:13
xxxx9659:這到底是什麼巫術 會什麼會少 1 !!! 08/29 02:23