Re: [問題] Change Counter程式碼錯誤

看板C_and_CPP作者 (休息..)時間13年前 (2011/04/22 13:52), 編輯推噓5(5011)
留言16則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《dream0127uk (TCK)》之銘言: : 各位鄉民好:) : 我現在做了一個程式是Change Counter : 要計算你身上原來有多少錢,然後花了多久錢,結果剩下多少錢 : 另外剩下的錢當中,必須分出多少張20元 多少張 10元之類 : 我的程式碼:http://codepad.org/kzRvMbnZ : 我不懂... : 我輸入身上有 14119000000000 : 但是我要花 564456600485.3933 : 結果會說出剩下 13554543399514.61 (正確) : 但是紙鈔和硬幣有多少個... 就完全錯誤了... : 救命 ... 我已經快頭暈死了... : 謝謝各位幫忙:) 這有幾個問題再裡面. 1. 有效位數的問題, double 只可以有10進位的15位有效位數, 這跟你用的系統, compile 有關. 你上面的例子有14位, 16位數. http://msdn.microsoft.com/zh-tw/library/system.double(v=vs.80).aspx 2. 還有 printf 4 捨 5入的問題. 你可以試著將%.2f 改為%.4f , 答案可能就會對了. or printf("%.2f, result*100); //用 x100 去看後面的有效數值 3. 輸入的問題, scanf 對小數的問題, 或是說 double 對 scanf的表示法問題, 這比較難解釋. 用你上面的例子0.125=1/8, 是有限位2進位可完全表示的 0.12, 表面上是有限10進位, 但對2進位來說確是要無限小數位. 這也會造成對4 捨 5入的另一影響, 有時我們認知的0.005 其實是 0.0049999999999.. , 或是 0.00500000000000000000000001 這兩個結果當然就不一樣. 你先用比較小的數試看看結果對不對. 如萬以內, 如果對了, 表示你的程式是沒有問題的, 還有一個方法, 如你要處理的數只到 0.001, 那你可以在你輸入時 先將 數 x1000, 如0.12 --> 120, 0.125 -->125 這樣就沒有 3 的問題. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.80.130.78 ※ 編輯: bbearh 來自: 219.80.130.78 (04/22 13:53)

04/22 14:05, , 1F
感謝,我研究一下:) 謝謝謝謝!!!
04/22 14:05, 1F

04/22 14:15, , 2F
關於錢幣部分 ... 我還是有點不懂 ... 為什麼會亂掉@
04/22 14:15, 2F

04/22 16:04, , 3F
printf("%d", (int) (a/b)); 前面是%d, 後面是F, 印出的結
04/22 16:04, 3F

04/22 16:04, , 4F
果當然不對.
04/22 16:04, 4F

04/22 22:50, , 5F
我整個還是不會修改錢幣部分... 囧 (請求協助)謝謝
04/22 22:50, 5F

04/24 23:08, , 6F
你現在的程式碼, 我試run 沒什麼問題. 現在還有問題嗎?
04/24 23:08, 6F

04/25 01:31, , 7F
錢幣部分..在數字金額太大之下,會無法正常顯示...
04/25 01:31, 7F

04/25 01:32, , 8F
不過我想 .. 可能是32位元的int不能顯示大於範圍的數
04/25 01:32, 8F

04/25 01:32, , 9F
字吧... 謝謝
04/25 01:32, 9F

04/25 09:51, , 10F
宣告用long long, int64,depend on compile/system
04/25 09:51, 10F

04/25 09:52, , 11F
可能可以再處理大一點的數, 這應是作業吧.
04/25 09:52, 11F

04/25 09:52, , 12F
應不會要求一定要多大吧?
04/25 09:52, 12F

04/25 09:52, , 13F
如果你真的要處理更大的數("大數"), 那你可以用array
04/25 09:52, 13F

04/25 09:53, , 14F
寫自己的 int, 再搭配寫一些 + - * / mod, 的function
04/25 09:53, 14F

04/25 09:53, , 15F
就可以處理了. 版上應有一些資料可以查.
04/25 09:53, 15F

04/25 12:38, , 16F
老師並沒有要求多大嚕 :) 謝謝你的幫助
04/25 12:38, 16F
文章代碼(AID): #1DiHU7WB (C_and_CPP)
文章代碼(AID): #1DiHU7WB (C_and_CPP)