伊莉討論區

標題: (9/5)*50+32 為什麼程式算出來不是122 [打印本頁]

作者: asdfg0205    時間: 2017-12-22 07:48 PM     標題: (9/5)*50+32 為什麼程式算出來不是122

本帖最後由 asdfg0205 於 2017-12-22 08:24 PM 編輯

不好意思我在做課本的練習題 但遇捯的一個疑問 (這提示 攝氏溫度 轉華氏溫度)
他給我了公式  (9/5)*攝氏溫度+32
然後 我試寫看看
int abc=(9/5)*50+32;
System.out.println(abc);

他跑出來的答案 都是 82??? 為何 都沒有算 (9/5) 這一段?
用計算機算 是 122  正確答案也是 122 (有去網站換算過)


作者: sggleeee    時間: 2017-12-22 10:45 PM

這行這樣改寫您看如何? 想一下差別在哪?
  1. float abc = (float)9/5*50+32;
複製代碼

作者: sggleeee    時間: 2017-12-23 12:05 AM

sggleeee 發表於 2017-12-22 10:45 PM
這行這樣改寫您看如何? 想一下差別在哪?

不客氣~ 其實有時候難免會疏忽 ,會有盲點....不妨慢慢 trace 一下code 看看問題發生點在哪......
有時後就能自己查出原因了 ~
作者: sggleeee    時間: 2017-12-23 12:34 AM

關於您再問的問題,您覺得底下這兩行會輸出怎樣的結果?
  1. System.out.println(9/5);
  2. System.out.println(9f/5f);
複製代碼

作者: sggleeee    時間: 2017-12-23 02:10 AM

如果還是不明白,就再試試這代碼,看您看到的結果是什麼.......
  1.    Object obj1 = 9/5;
  2.    Object obj2 = 9f/5f;

  3.    System.out.println(obj1.getClass().getName());
  4.    System.out.println(obj2.getClass().getName());
複製代碼

作者: sggleeee    時間: 2017-12-23 03:25 PM

不客氣~

您的問題在於 9 與 5 都為整數,當您做 9/5 這運算時,它也是以整數型態來運算,因此結果會為整數的 1

所以(9/5)*50+32 會得到 1*50+32 = 82,若您宣告的變數abc為int,您會看到 82 的結果,
若您宣告的abc為float,您會看到 82.0

另外再補充一下,如果您第一行改為 float abc = (9.0/5.0)*50+32;
您將得到錯誤訊息 incompatible types: possible lossy conversion from double to float
這是因為compiler 預設會將 9.0 與 5.0 視為 double 型態

以上給您參考
作者: popuui123    時間: 2018-2-23 05:09 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: sggleeee    時間: 2018-2-23 10:03 PM

popuui123 發表於 2018-2-23 05:09 PM
sggleeee這位朋友回答的太好了,又耐心又細致,有些老師都不一定有對學生解答的這麼周全,太棒了! ...

謝謝您的稱讚 ~
其實同為程式學習新手,有時候在學習時會遇到卡殼 (觀念與思考一時轉不過來)....
這時有時候會希望有前輩或同儕能分享經驗.....
因此看到別人的發問的問題,如果剛好會,都會希望能與他分享一下經驗....
而我通常比較傾向引導思考,而非直接告訴答案,這樣才有助於學習的成長~~
作者: jackyo04    時間: 2018-7-5 05:33 PM

在補充一下,如果部糾結小數點的話,記得將運算完的數值以Int呈現,float 計算小數點後面會有許多雜亂的數字存在




歡迎光臨 伊莉討論區 (http://www33.eyny.com/) Powered by Discuz!