Извините за основной вопрос, Я должен делить длинную переменную на другую длинную переменную, но она возвращает 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.