2012-02-01 2 views

ответ

6

Вам нужно, чтобы один из операндов деления был двойным. Как это:

double movT = ((double)distM/velMperMin)*60; 

Ваш код выполняет целочисленное деление distM/velMperMin и что приводит к 0. Затем вы умножаете это на 60. Еще 0. Затем вы конвертируете в double и теперь это 0.0.

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

+0

или он просто мог бы определить их как двойные. –

+1

@Vash Возможно, но иногда у вас могут быть базовые переменные, которые являются натуральными целыми числами, но затем вы хотите выполнить с ними арифметику с плавающей запятой. –

1

Результат int/int: int (70/667 = 0.xxx, что равно 0). Вы должны бросить хотя бы один int к double перед тем делением:

double movT = ((double) distM/velMperMin)*60; 

Или просто определить одну из переменных, как в два раза.

1

С 70/667 является 0, 0 * 60 является 0, тоже.

0

distM и velMperMin являются целыми числами и делятся на них равными 0, потому что результат меньше единицы и будет разрезан на целое число int. Умножение нуля на 60 равно нулю.

0

Это нормально: при использовании целых чисел 70/667 равно 0, где, как при использовании двойника, это приведет к 0,1049. Попробуйте изменить velMperMin и distM на парные.

0

Проблема, которую вы имеете в отношении деления, выполняемого по целочисленному типу.

Когда вы делите целое число, в результате у вас также будет целое число. В вашем случае вы делите 70 на 667. Это дает 0 и 10494 ... отдых. Таким образом, конечный результат равен нулю, мы не имеем места для хранения десятичных значений.

0

Не попадайте во внутреннее деление или вы получите результат int.

Double velMperMin = new Double(667); 
Double distM = new Double(70); 
Double movT = (distM/velMperMin * 60); 
+0

Вы не имеете в виду 'double', а не' Double'? –

+0

Нет. Это неверный вывод. Вы можете использовать либо примитивный двойной, либо двойной. Дело в том, что не следует ожидать двойного (или двойного) результата от деления int, так как другие SO сказали – Alfabravo

4

Самый простой способ исправить это кратному по double первой.

double movT = 60.0 * distM/velMperMin; 
Смежные вопросы