2012-06-02 159 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将包含一个分歧部分因此没有任何依据。