Как разделить две длинные переменные в java

Извините за основной вопрос,  Я должен делить длинную переменную на другую длинную переменную, но она возвращает 0. Может ли кто-нибудь помочь

long a = 3004230;
long b =  6793368;
long c = (a/b)*100;

Ответ 1

Литеральные значения и литературные арифметические

Есть несколько проблем с этим кодом. Во-первых, значения с плавающей запятой имеют тип int по умолчанию, поэтому 3004230 в вашем коде int. Чтобы явно объявить его long, используйте 3004230L.

Кроме того, вся арифметика, выполненная с не-плавающей точкой литералы, возвращает результат int, если специально не применяется к типу с плавающей точкой, например float или double. Как таковой (a/b)*100 меньше 1, и поэтому усечен до 0 (значения с плавающей запятой просто отключены). Кроме того, даже если он возвращает тот же результат, вы пытаетесь сохранить его в long, который не может хранить значения с плавающей запятой.

Итак, вы должны сделать что-то вроде следующего, чтобы получить реальный результат.

long a = 3004230L; // Use the L notation to declare this literal a long.
long b = 6793368L;
double c = ((double)a/b)*100; /* casting your division result to (double) means 
                                 the result will not be 0 */

Надеюсь, это поможет.

Ответ 2

final long a = 3004230;
final long b = 6793368;
final double c = ((double) a / b) * 100;

= > c = 44.22298335670907

Ответ 3

попробуйте.

long a = 3004230;
long b =  6793368;
long c = ((long)((float)a/(float)b)*100); //answer=44
float c = ((long)((float)a/(float)b)*100); //answer=44.1256378

Ответ 4

очевидно, что ответ будет 0 для выше..., вы можете видеть, когда вы делите

3004230/6793368 = 0.442 = 0 (при приведении в тип long)

и

0 * любое число = 0..

чтобы преобразовать его, используйте этот

double c = (a * 1.0/b)*100.0;

вам нужно использовать тип данных, который может хранить значение decimal, которое равно float или double.. long не может хранить десятичные числа

Ответ 5

Вы можете сделать то же самое без нажатия на float:

long a =  3004230L;
long b =  6793368L;
long c = (a * 100L)/b;

Ответ 6

То, что вы сейчас делаете, - это целочисленное деление. Это всегда возвращает целочисленный/длинный результат. Вы должны использовать float или double, чтобы получить результат с плавающей запятой, даже если после этого вы вернете его обратно к целым значениям.

long c = (long)(a/(float)b*100);

Ответ 7

Длительный c, который вы создаете, - это не то значение, которое вы ожидали. Он находится в целочисленном диапазоне. Чтобы создать longs, используйте

окончательный длинный c = 3004230L * 6793368L; Добавляя L после литерала числа, вы говорите компилятору компилировать его как long, а не int.