int velMperMin = 667;
int distM = 70;
double movT = (distM/velMperMin)*60;
movtT
должно быть равно 6.30
, но это 0
.Получение двойного значения из отношения целых чисел
int velMperMin = 667;
int distM = 70;
double movT = (distM/velMperMin)*60;
movtT
должно быть равно 6.30
, но это 0
.Получение двойного значения из отношения целых чисел
Вам нужно, чтобы один из операндов деления был двойным. Как это:
double movT = ((double)distM/velMperMin)*60;
Ваш код выполняет целочисленное деление distM/velMperMin
и что приводит к 0
. Затем вы умножаете это на 60. Еще 0
. Затем вы конвертируете в double и теперь это 0.0
.
Выполнение одного из операндов до double
гарантирует, что деление будет делением с плавающей запятой, а не целочисленным делением и даст ожидаемый результат.
Результат int/int
: int
(70/667 = 0.xxx, что равно 0). Вы должны бросить хотя бы один int
к double
перед тем делением:
double movT = ((double) distM/velMperMin)*60;
Или просто определить одну из переменных, как в два раза.
С 70/667
является 0
, 0 * 60
является 0
, тоже.
distM и velMperMin являются целыми числами и делятся на них равными 0, потому что результат меньше единицы и будет разрезан на целое число int. Умножение нуля на 60 равно нулю.
Это нормально: при использовании целых чисел 70/667 равно 0, где, как при использовании двойника, это приведет к 0,1049. Попробуйте изменить velMperMin и distM на парные.
Проблема, которую вы имеете в отношении деления, выполняемого по целочисленному типу.
Когда вы делите целое число, в результате у вас также будет целое число. В вашем случае вы делите 70 на 667. Это дает 0 и 10494 ... отдых. Таким образом, конечный результат равен нулю, мы не имеем места для хранения десятичных значений.
Не попадайте во внутреннее деление или вы получите результат int.
Double velMperMin = new Double(667);
Double distM = new Double(70);
Double movT = (distM/velMperMin * 60);
Вы не имеете в виду 'double', а не' Double'? –
Нет. Это неверный вывод. Вы можете использовать либо примитивный двойной, либо двойной. Дело в том, что не следует ожидать двойного (или двойного) результата от деления int, так как другие SO сказали – Alfabravo
Самый простой способ исправить это кратному по double
первой.
double movT = 60.0 * distM/velMperMin;
или он просто мог бы определить их как двойные. –
@Vash Возможно, но иногда у вас могут быть базовые переменные, которые являются натуральными целыми числами, но затем вы хотите выполнить с ними арифметику с плавающей запятой. –