2015-03-30 3 views
2

Моя проблема:Почему Java не заставляет int автоматически удвоить выражение?

int a = 30, b = 12, c = 2, d = 5, e = 1; 

double result = (double) (a - b/(c * d) + e); 

System.out.print("Result = " + (double) result + " - " + result); 

Результат:

Result = 30.0 - 30.0 

То, что я хочу видеть это: 29,8!

У меня есть целые числа, но я хочу оценить выражение, которое мне нужно иметь в двойной точности.

Есть ли простой способ сделать то, что я пробовал?

ответ

1

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

Например:

double result = (a - (double)b/(c * d) + e); 

или

double result = (a - b/(double)(c * d) + e); 

Это обеспечит разделение осуществляется с использованием арифметических операций с плавающей точкой.

1

Почему нет java cast int, чтобы автоматически удвоить выражение?

Поскольку выражение, где вы не получаете дробное значение вычисляется на основе чисто по операндам вы даете ему, а не более контекст (что было бы ужасно сложнее). Итак, a - b, c * d и ... + e все работают с int значениями. Только после того, как у вас есть конечный результат, вы делаете его на double, и компилятор не смотрит на больший контекст и угадывает, что вы хотели сделать это раньше (это хорошая вещь (tm)).

Если вы хотите, чтобы операции выполнялись с значениями double, вы должны сообщить компилятору, что. В этом случае, вы можете поставить этот бросок в любом из нескольких мест, которые затем «пузыриться» в любых выражениях результат используется в этом одно место, где вы можете положить его:.

double result = (a - b/(double)(c * d) + e); 

Live example

0

Результатом операции между int является int. Таким образом, 12/10 является int one 1, если вы хотите получить двойной номер 1.2, вы должны сделать одно из выражений double, например double result = (a - (double)b/(c * d) + e);.

+0

Почему отрицательный голос? –

Смежные вопросы