2016-12-20 13 views
1

Я пытался Java9 функцию JShell. Я не в состоянии установить значение с плавающей точкой:JShell возможный lossy конверсия из double to float

jshell> float b = 3.5 
Error: 
| incompatible types: possible lossy conversion from double to float 
| float b = 3.5; 
jshell> float x =2 
x ==> 2.0 
+3

попробуйте '3.5f', чтобы присвоить значение и поиск о' lossy conversion from double to float' –

+3

В чем вопрос? Имейте в виду, что в Java '3.5' есть буква' double'. Соответствующий литерал 'float' равен' 3.5f'. –

+0

спасибо, что работа – jos

ответ

4

Это Java неоправданно придирчивый.

типа из буквального3.5 является double, и вы назначаете, что к float.

Поскольку набор возможных float s обязательно является подмножеством набора возможных double, вы получаете точность, потерянную при преобразовании.

Для удобства использования используйте 3.5f для обозначения буквально float.

Но обратите внимание, что 3.5 можно представить точно в обоих double и float, поэтому на этом конкретном случае, ошибка фигню.

+1

спасибо @bathsheba – jos

+1

В старые добрые времена компиляторы предполагали, что программисты знали, что они делают. – Bathsheba

0

Это поведение Java (как описано в существующем ответе). JShell точно соответствует синтаксису и семантике Java - это важно, поэтому вы не разрабатываете неверный код.