Возможный дубликат:
Java Integer Division, как вы производите двойной?
double wang = 3 / 2;
Log.v("TEST", "Wang: " + Double.toString(wang));
Выход Logcat...
07-04 09:01:03.908: VERBOSE/TEST(28432): Wang: 1.0
Я уверен, что есть очевидный ответ на этот вопрос, и, вероятно, я просто устал от кодирования всю ночь, но это меня застопорило.
На многих языках Java является одним из них, способ записи числа в выражении определяет, какой тип он получает. В Java несколько типов общих чисел ведут себя так: 1:
// In these cases the specs are obviously redundant, since all values will be
// cast correctly anyway, but it was the easiest way to show how to get to the
// different data types :P
int i = 1;
long l = 1L;
float f = 1.0f; // I believe the f and d for float and double are optional, but
double d = 1.0d; // I wouldn't bet on what the default is if they're omitted...
Таким образом, когда вы объявляете 3/2
, вы действительно говорите (the integer 3)/(the integer 2)
. Java выполняет деление и находит результат равным 1
(т. the integer 1
...), так как результат деления чисел 3 и 2 как целых. Наконец, the integer 1
the double 1.0d
который хранится в вашей переменной.
Чтобы обойти это, вы должны (как многие другие предложили) вместо этого вычислить фактор
(the double 3) / (the double 2)
или, в синтаксисе Java,
double wang = 3.0 / 2.0;
1 Источник: учебник по Java от Oracle
f
и d
опущены, double
. «Литерал с плавающей запятой имеет тип float
если к нему добавлен ASCII-символ F
или f
; в противном случае его тип является double
и к нему можно добавить суффикс D
или D
d
».
Целочисленное деление 3
на 2
равно 1
с остатком 1
. Литье в double
дает 1.0
3
и 2
являются целыми константами, и поэтому 3/2
является целым делением, которое приводит к 1
которое затем переводится в двойное. Вы хотите 3.0/2.0
Попробуйте: double wang = 3.0/2.0;
Это ожидаемое поведение. "3" и "2" - оба значения int
, а когда вы выполняете 3/2
результат также будет значением int
которое округляется до 1. Если вы произведете double
перед выполнением деления, вы получите результат, который вы ожидаете:
double wang = (double)3 / (double)2;