3/2 = 1,0? действительно? [Дубликат]

1

Возможный дубликат:
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

Я уверен, что есть очевидный ответ на этот вопрос, и, вероятно, я просто устал от кодирования всю ночь, но это меня застопорило.

  • 4
    Это число!
Показать ещё 3 комментария
Теги:

5 ответов

12
Лучший ответ

На многих языках 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

Показать ещё 1 комментарий
6

Целочисленное деление 3 на 2 равно 1 с остатком 1. Литье в double дает 1.0

5

3 и 2 являются целыми константами, и поэтому 3/2 является целым делением, которое приводит к 1 которое затем переводится в двойное. Вы хотите 3.0/2.0

5

Попробуйте: double wang = 3.0/2.0;

2

Это ожидаемое поведение. "3" и "2" - оба значения int, а когда вы выполняете 3/2 результат также будет значением int которое округляется до 1. Если вы произведете double перед выполнением деления, вы получите результат, который вы ожидаете:

double wang = (double)3 / (double)2;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню