Извините за основной вопрос, Я должен делить длинную переменную на другую длинную переменную, но она возвращает 0. Может ли кто-нибудь помочь
long a = 3004230;
long b = 6793368;
long c = (a/b)*100;
Извините за основной вопрос, Я должен делить длинную переменную на другую длинную переменную, но она возвращает 0. Может ли кто-нибудь помочь
long a = 3004230;
long b = 6793368;
long c = (a/b)*100;
Есть несколько проблем с этим кодом. Во-первых, значения с плавающей запятой имеют тип 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 */
Надеюсь, это поможет.
final long a = 3004230;
final long b = 6793368;
final double c = ((double) a / b) * 100;
= > c = 44.22298335670907
попробуйте.
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
очевидно, что ответ будет 0 для выше..., вы можете видеть, когда вы делите
3004230/6793368 = 0.442 = 0 (при приведении в тип
long)
и
0 * любое число = 0..
чтобы преобразовать его, используйте этот
double c = (a * 1.0/b)*100.0;
вам нужно использовать тип данных, который может хранить значение decimal, которое равно float или double.. long не может хранить десятичные числа
Вы можете сделать то же самое без нажатия на float:
long a = 3004230L;
long b = 6793368L;
long c = (a * 100L)/b;
То, что вы сейчас делаете, - это целочисленное деление. Это всегда возвращает целочисленный/длинный результат. Вы должны использовать float или double, чтобы получить результат с плавающей запятой, даже если после этого вы вернете его обратно к целым значениям.
long c = (long)(a/(float)b*100);
Длительный c, который вы создаете, - это не то значение, которое вы ожидали. Он находится в целочисленном диапазоне. Чтобы создать longs, используйте
окончательный длинный c = 3004230L * 6793368L; Добавляя L после литерала числа, вы говорите компилятору компилировать его как long, а не int.