Re: [語法] 在寫程式時 遇到將浮點數轉換成整數的問題
那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
討論串 (同標題文章)
完整討論串 (本文為第 4 之 7 篇):