2012-06-02 223 views
1

有人可以告訴我什麼是錯的。當我將低和高的方程式輸入計算器時,我得到低= 118.129高= 113.629。
但由於某種原因,當我運行代碼時,低和高顯示119.0。數學計算不正確

match_FRC = 82;//Double.parseDouble(FRC_match_textbox.getText().toString()); 
match_DTR = 1.455;//Double.parseDouble(DTR_match_textbox.getText().toString()); 

//math functions 
low = Math.round((match_FRC * match_DTR)/((1/100)+1)); 
high = Math.round((match_FRC * match_DTR)/((5/100)+1)); 
+0

這可能是一個關於整數除法和實數除法之間的區別的問題的重複,但我一直無法找到正確的問題。 –

+0

@MichaelMcGowan我實際上首先嚐試在瀏覽器控制檯中測試它(JS也有'Math.round'),並試圖找出爲什麼我不能複製這個錯誤。然後才發現它實際上是Java。它在JS中工作,因爲JS沒有整數。 – Alnitak

回答

6

你需要使用一個浮點常量,而不是整數,如:

low = Math.round((match_FRC * match_DTR)/((1.0/100)+1)); 

正因爲如此,你的((1/100) + 1)是一個整數表達式,其準確1.

使將1分成1.0(或將100分成100.0)會將其他操作數(以及表達式作爲一個整體)提升爲浮點。

+0

謝謝修復一切。 –

0

我很簡單就像數學!

5/100 (Integer) = 0 
0 + 1 = 1 
82*1.455 = 119.31 
119.31/1 = 119.31 
round (119.31) = 119 

只是改變100〜100.0

low = Math.round((match_FRC * match_DTR)/((1/100.0)+1)); 
high = Math.round((match_FRC * match_DTR)/((5/100.0)+1)); 
0

你打字Math.round()到計算器?

Math.round()傳遞long,沒有小數部分。因此你的期望low將包含一個分歧部分因此沒有任何依據。