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

看板C_and_CPP作者 (duv)時間14年前 (2009/09/15 22:54), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/7 (看更多)
那1.850公里減掉基本運費的里程數(1.5公里)為 1.85-1.5=0.35(公里) 又因為每0.3公里加收五元(不足0.3公里以0.3公里計) 而(0.35/0.3)*5=1.1666666.. . 這裡是 1.1666666個 0.3公里,他確實>=1,因此滿足`0.3公里的條件` 1.16666...*5= 5.83333333(元) 這樣會使得總運費只有70+5.83333333= 75.83333333 捨去小數得到的只是75元 根本就嚴重計算錯誤 本來就應該是75.833了不是? 並不是 因為原來的題目(見上)有說 不足0.3公里 要自動算成是0.3公里 所以此時的總車資應該要是70+5*2=80(元) 正確算法應該是遇到 0.35/0.3=1.1666666...小數點後面有小數時 就要無條件進位讓1.1666666....變成2 原題目你所po的部份沒有顯示這玩意啊,你應該只是為了反駁而寫這個解釋吧 我並沒有因為為了反駁而寫這個解釋.... 原來的題目 "超過1.5公里後, 每0.3公里, 加收5元 (不足0.3公里, 仍以0.3公里計)" 而為了滿足題目所求 我先宣告一個整數int t; 這個t=(y-1.5)/0.3; 假定y=1.850 則t此時原應等於(1.850-1.5)=0.350/0.3=1.166666... =>但由於取整數的關係 t會變成無條件捨去 值只等於1 原本是應該要無條件進位的 但變成無條件捨去 t的值會相差1 而這個情況只要y-1.5之後的值不能整除0.3 都會發生 但相對的 這個情況只要y-1.5之後的值能整除0.3 就不會發生 (ex: y=2.70 => y-1.5=2.7-1.5=1.2 => (y-1.5)/0.3=4) 所以我後面才設計了一個if選擇 以判斷情況是哪種: if(0.3*(t+1.5)==y) 但我這邊寫錯了 很抱歉 我應該要寫的是: if(0.3*t+1.5==y) 舉例來說 像上面的y=1.850的情況 其對應的t=1 則此時if(0.3*t+1.5==y)式子中的等號左邊是 0.3*1+1.5=1.8 就不等於y=1.850 就會進入else的部分 z=(y-1.5)/0.3; w=70+5*(z+1); 其中的z,w是整數int 此時z=(1.850-1.5)/0.3=1.16666=>1 w=70+5*(1+1)=80 ...+1是為了要達到階梯式進位的效果 ※ 編輯: duv 來自: 140.119.143.103 (09/15 22:58)

09/15 23:29, , 1F
瞭解 ^^"
09/15 23:29, 1F
文章代碼(AID): #1AhwgDwp (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AhwgDwp (C_and_CPP)