Математический расчет не верен

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 не имеет целых чисел.
Теги:
math

3 ответа

6
Лучший ответ

Вам нужно использовать константу с плавающей запятой вместо целых чисел, например:

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

Как бы то ни было, ваш ((1/100) + 1) представляет собой целочисленное выражение, которое равно 1.

Создание 1 в 1.0 (или 100 в 100.0) приведет к продвижению других операндов (и выражения в целом) в плавающую точку.

  • 0
    Спасибо, что все исправили.
0

Вы вводите Math.round() в калькулятор?

Math.round() обеспечивает long, без дробной части. Ваше ожидание, что low будет содержать фрактальную часть, поэтому не имеет оснований.

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));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню