Re: [語法] 在寫程式時 遇到將浮點數轉換成整數的問題

看板C_and_CPP作者 (如果)時間14年前 (2009/09/15 22:17), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串3/7 (看更多)
我用C寫的 -- #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { float kilometer; int fare; printf("請輸入里程(公里)[可輸入至小數點第三位的數字]:"); scanf("%f", &kilometer); if (kilometer <= 1.5) { fare = 70; } else { fare = 70 + 5 * (int)ceil((kilometer - 1.5) / 0.3); } printf("車資 = %d\n", fare); system("pause"); return 0; } 不知道為什麼我沒加(int)也不會有warning 編譯時我有加上-Wall -- ※ 引述《duv (duv)》之銘言: : 底下是一個我寫的簡單程式 : 程式是有關於計程車車資的計算問題: : 假定計程車在1.5公里內, 車資都是70元; : 超過1.5公里後, 每0.3公里, 加收5元 (不足0.3公里, 仍以0.3公里計) : 請輸入搭乘里程數(以公里計)(可精確到小數點第三位,即可精確到公尺)(ex:1.853公里) : 求算對應的車資為多少. : ============================================================================== : 底下則是我寫的程式 : 基本上程式可以跑出正確的結果 : 但由於搭乘里程數為浮點數 : 所以編譯器(我用dev C++這個編譯器)在編譯程式的時候 : 都會出現 : In function 'int main()': : [Warning] converting to 'int' from 'double' : [Warning] converting to 'int' from 'double' : [Warning] converting to 'int' from 'double' : 這樣的警示訊息 : 想請問 這樣的警示訊息 有可能是在警示什麼樣的負面情況呢@ @ : 又如果要避免出現這樣的警示訊息 我原來的程式寫法要怎麼改善(或改變)呢 : ============================================================================== : 我寫的程式 : float y; : int t; : t=(y-1.5)/0.3; : int z; : int w; : cout<<"請輸入里程(公里)[可輸入至小數點第三位的數字]"; : cin>>y; : if (y<=1.500) : { : z=70; : } : else : { : if(0.3*(t+1.5)==y) : { : z=(y-1.5)/0.3; : w=70+5*z; : } : else : { : z=(y-1.5)/0.3; : w=70+5*(z+1); : } : } : cout<<"車資="<<w<<endl; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.12.79

09/15 22:31, , 1F
您提了我才發現, 為什麼ceil/floor回傳都是浮點數啊@_@"
09/15 22:31, 1F

09/15 22:31, , 2F
這兩個不就一個round up一個round down嗎@_@"
09/15 22:31, 2F

09/15 22:31, , 3F
yes @@"
09/15 22:31, 3F

09/15 22:58, , 4F
不然要回傳int嗎..要是超過int範圍不就炸了XD
09/15 22:58, 4F

09/15 23:52, , 5F
有道理說, 我忘了浮點數值域遠大得多; 可是這樣一來把浮
09/15 23:52, 5F

09/15 23:53, , 6F
點誤差考慮進來, 搞不好傳回來的又是個錯的結果啊@_@"
09/15 23:53, 6F
文章代碼(AID): #1Ahw7yZ- (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 3 之 7 篇):
文章代碼(AID): #1Ahw7yZ- (C_and_CPP)