2012-06-02 2 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 будет содержать фрактальную часть, поэтому не имеет никакого основания.

Смежные вопросы