Вопрос-ответ

Division of integers in Java [duplicate]

Деление целых чисел в Java

Это базовый вопрос, но я не могу найти ответа. Я изучал арифметику с плавающей запятой и несколько других тем, но, похоже, ничего не касалось этого. Я уверен, что у меня просто неправильная терминология.

В принципе, я хочу взять две величины - выполненную и итоговую - и разделить их, чтобы получить процент (от того, сколько было выполнено). Величины - это longs. Вот настройка:

long completed = 25000;
long total = 50000;

System.out.println(completed/total); // Prints 0

Я пробовал переназначить результат на double - он печатается 0.0. Где я ошибаюсь?

Кстати, следующим шагом будет умножение этого результата на 100, что, я полагаю, будет несложно, как только будет преодолено это небольшое препятствие.

Кстати, здесь не домашнее задание, а просто старая логика (и, возможно, сегодня слишком много кодирования).

Переведено автоматически
Ответ 1

Преобразование выходных данных выполняется слишком поздно; вычисление уже выполнено в целочисленной арифметике. Вам необходимо преобразовать входные данные в double:

System.out.println((double)completed/(double)total);

Обратите внимание, что на самом деле вам не нужно преобразовывать оба входных параметра. Пока один из них является double, другой будет преобразован неявно. Но я предпочитаю делать и то, и другое, для симметрии.

Ответ 2

Для этого вам даже не нужно удваивать. Просто сначала умножьте на 100, а затем разделите. В противном случае результат будет меньше 1 и будет усечен до нуля, как вы видели.

редактировать: или, если переполнение вероятно, если оно будет переполнено (т. Е. Дивиденд будет больше, чем 922337203685477581), сначала разделите делитель на 100.

Ответ 3
In Java
Integer/Integer = Integer
Integer/Double = Double//Either of numerator or denominator must be floating point number
1/10 = 0
1.0/10 = 0.1
1/10.0 = 0.1

Просто введите приведение любого из них.

Ответ 4

Преобразуйте оба completed и total в double или, по крайней мере, преобразуйте их в double при выполнении devision. Т.е. преобразуйте переменные, чтобы удвоить не только результат.

Справедливое предупреждение, существует проблема точности с плавающей запятой при работе с float и double.

java