2017-09-23 62 views
1

我正在嘗試使數學代碼。但我做不到。十進制數學錯誤結果

double x = z + ((z * (25.7 - (((z - 400)/30) * 1.27)))/100); 
int d = (int) Math.round(x); 

例如,如果z = 910。 真正的數學結果是,x = 947.401,d = 947,但它不通過此代碼。

你能幫我解決。

+0

或許應該明白,你是如何操作的數量,因爲它看起來像你根據你的方式失去精度'盡一切努力。您應該瞭解有關double的整數截斷和操作精度。 – JoxTraex

+0

如果'z'是整數,則表達式(z -400)/ 30中的精度將會降低。 – CAF

+0

謝謝,您向我展示瞭解決方案。 –

回答

2

你應該知道的優先級是如何工作的編程

  • ()高優先級
  • 然後/和*

  • - 和+

在你的問題

Th是聲明z + ((z * (25.7 - (((z - 400)/30) * 1.27)))/100)將執行作爲

let z = 910 

(z - 400) // result 510 
then this (z - 400)/30) // result 17 
then this (((z - 400)/30) * 1.27))) // result 21.59 
then this (25.7 - (((z - 400)/30) * 1.27)) //result 4.11 
then this (25.7 - (((z - 400)/30) * 1.27)))/100) // result 0.2159 
then this ((z * (25.7 - (((z - 400)/30) * 1.27)))/100) // result 37.401 
then this z + ((z * (25.7 - (((z - 400)/30) * 1.27)))/100) // final result 947.401 

然後,它會四捨五入的947.401,給你947

+0

謝謝,您向我展示瞭解決方案。 –