x=-10 % -4;
    System.out.println("-10% -4 : "+x); //-2 second row

На выходе «-2» почему в ответе отрицательное значение?

1
Drift with Umiya 5 Ноя 2019 в 07:24
Я тоже не вижу ничего плохого в результате. Чего ты ждешь?
 – 
Spangle
5 Ноя 2019 в 07:31
 – 
Andreas
5 Ноя 2019 в 07:33
1
Поскольку в Java есть оператор остатка , а не оператор по модулю, см. Спецификацию языка Java, раздел 15.17.3. Оператор остатка %
 – 
Andreas
5 Ноя 2019 в 07:56
 – 
phuclv
5 Ноя 2019 в 08:22

2 ответа

% - остаток от деления. Это сумма, оставшаяся после целочисленного деления.

x = -10 / -4; // == 2

А также

x = -10 % -4; // == -2

Последнее можно представить как -10, деленное на -4 (что равно 2) с остатком -2.

Было бы легче увидеть, если бы оба ответа не были одинаковыми по абсолютной величине.

x = -10 / -3; // == 3

А также

x = -10 % -3;  == -1
3
fedup 5 Ноя 2019 в 07:34
2
В частности, с помощью dividend = -10 и quotient = -3 мы вычисляем divisor = dividend / quotient = -10 / -3 = 3 (математическое выражение с усеченным целым числом) и remainder = dividend - divisor * quotient = -10 - 3 * -3 = -10 - -9 = -10 + 9 = -1
 – 
Andreas
5 Ноя 2019 в 07:45

К сожалению, именно так оператор модуля Java работает с отрицательными числами. Если вам нужны только положительные значения остатка, выполните простое преобразование, подобное этому:

if(x < 0){
    x = x * -1;
}
1
allkenang 5 Ноя 2019 в 07:34
3
«так работает оператор модуля Java» За исключением того, что в Java нет оператора модуля , только оператор остатка . --- Ссылка 1: Спецификация языка Java, раздел 15.17.3. Остающийся оператор%. --- Ссылка 2: В чем разница между «модом» и «остатком»?
 – 
Andreas
5 Ноя 2019 в 07:50
Если вам нужны только положительные значения, используйте Math.abs().
 – 
Andreas
5 Ноя 2019 в 07:54
Не знаю, почему меня отвергли за это. Тот факт, что большинство сайтов описывают оператор '%' как оператор модуля вместо оператора остатка, широко понимается, и утверждать обратное - это немного педантично, imho.
 – 
allkenang
5 Ноя 2019 в 09:21
1
Это педантичный бизнес. Разница между остатком и модулем - это ответ на вопрос. JLS описывает это как оператор остатка, punto basta.
 – 
user207421
5 Ноя 2019 в 10:34
1
Эти жалобщики правы и неправы. В математике и java "%", и python "%" являются примерами операторов, подобных остатку. Или вы можете называть их операторами модуля, не ошибаясь. В математике остаток всегда> = 0, именно так работает оператор% python. К сожалению, компьютерные ученые всегда свободно пересматривали устоявшееся значение математических терминов. Итак, в какой-то момент кто-то произвольно решил, что способ, которым java (и некоторые другие) делает "%", называется оператором остатка. Но это условность, так что привыкайте.
 – 
President James Moveon Polk
5 Ноя 2019 в 20:21