Это базовый вопрос, но я не могу найти ответа. Я изучал арифметику с плавающей запятой и несколько других тем, но, похоже, ничего не касалось этого. Я уверен, что у меня просто неправильная терминология.
В принципе, я хочу взять две величины - выполненную и итоговую - и разделить их, чтобы получить процент (от того, сколько было выполнено). Величины - это longs. Вот настройка:
longcompleted=25000; longtotal=50000;
System.out.println(completed/total); // Prints 0
Я пробовал переназначить результат на double - он печатается 0.0. Где я ошибаюсь?
Кстати, следующим шагом будет умножение этого результата на 100, что, я полагаю, будет несложно, как только будет преодолено это небольшое препятствие.
Кстати, здесь не домашнее задание, а просто старая логика (и, возможно, сегодня слишком много кодирования).
Переведено автоматически
Ответ 1
Преобразование выходных данных выполняется слишком поздно; вычисление уже выполнено в целочисленной арифметике. Вам необходимо преобразовать входные данные в double:
Обратите внимание, что на самом деле вам не нужно преобразовывать оба входных параметра. Пока один из них является 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. Т.е. преобразуйте переменные, чтобы удвоить не только результат.