Java дважды неверно приведен к int - PullRequest
0 голосов
/ 30 марта 2019

Когда я пытаюсь привести в двойное число к int.Моя переменная "проверка" всегда равна нулю.Но если я делаю это в PSVM, это работает.Если я делаю это в классе, проверка всегда равна нулю.Как я могу решить эту проблему?Я пытаюсь использовать Double и Integer для приведения, это тоже не работает.

Я использую Java 11 в Ubuntu 18.

public class Round {

    public int round (double value) {
        return (value > 0) ? roundPositiveNubmer(value) : roundNegativeNumber(value);
    }

    private int roundPositiveNubmer(double value) {
        int result;
        double checkD = value * 10 % 10;
        int check = (int) checkD;
        if (check > 5) {
            value++;
            result = (int) value;
        } else {
            result = (int) value;
        }
        return result;
    }

    private int roundNegativeNumber(double value) {
        int result;
        double checkD = value * 10 % 10;
        int check = (int) checkD;
        if (check > -5 && check < 0) {
            value--;
            result =  (int) value;
        } else {
            result =  (int) value;
        }
        return result;
    }
}

Когда я пытаюсь округлить 23.6.У меня есть 23, но должен 24.

1 Ответ

2 голосов
/ 30 марта 2019

Ваш код хорошо работает в положительном случае, как JB Nizet уже намекнул в комментарии.

Проблема в отрицательном случае. round(-23.6) дает -23, а не -24. Это вызвано этой строкой:

    if (check > -5 && check < 0) {

В случае -23,6 check равно -6, что на меньше , чем -5. Я думаю, вы хотите проще:

    if (check < -5) {

Теперь -23,6 округляется до -24. -23,5 все еще округляется до -23. Если вы хотели -24 и в этом случае:

    if (check <= -5) {

Вы также можете подумать, хотели ли вы >= в положительном случае.

Или просто используйте Math.round ()

Сурабх Бхат также прав в комментарии: вы заново изобретаете колесо. Math.round() уже выполняет ту работу, которую выполняет ваш метод округления. Так что, если вы кодируете это как упражнение, хорошо, вы учитесь, это всегда хорошо. Для производственного кода вы должны вместо этого использовать существующий встроенный метод библиотеки.

    int rounded = Math.toIntExact(Math.round(-23.6));
    System.out.println("Rounded: " + rounded);

Округлено: -24

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...