2013-02-28 67 views
0

只有我常常發現自己寫的東西,如:數學計算與混合型

int part = 7; 
int whole = 10; 
... 

int percentage = (int) (100.0 * (double) part/ (double) whole); 

有減少到最低限度鑄件的數量(不實際修改原始類型的變量的方式... )?

回答

5

代碼有問題等同於:

int percentage = (int) (100.0 * part/ whole); 

雙參數付出雙倍的結果,算術運算所以partwhole自動轉換爲double

1

你並不需要轉換,這將是在你的操作中自動鑄造100.0*part/whole給你一個雙倍數值,只投一次整數,這將是最終值

int percentage = (int) (100.0 * part/ whole); 
+0

嚴格地說,'part/whole'將返回一個整數值。儘管100.0 * part/whole'會返回一個double值(Java會自動將部分和整體轉換爲double,因爲100.0是double) – RudolphEst 2013-02-28 12:47:30

+0

是的,我想我在我的答案中錯過了100.0,更新了,謝謝注意 – nsgulliver 2013-02-28 12:48:55

2

有問題的代碼等價於:

int percentage = 100 * part/whole; 

沒有浮點運算任何得益於雙鑄造轉換如何int和整數除法的工作。 (如果最後拋出小數部分,爲什麼還要計算它。)