Двоичная числовая акция для поплавков - PullRequest
1 голос
/ 03 апреля 2019

В JLS в 5.6.2.Двоичное числовое продвижение:

Когда оператор применяет двоичное числовое продвижение к паре операндов, каждый из которых должен обозначать значение, которое может быть преобразовано в числовой тип, применяются следующие правила:

Если какой-либо операнд имеет ссылочный тип, он подвергается преобразованию без распаковки (§5.1.8).

Применяется расширяющее примитивное преобразование (§5.1.2) для преобразования одного или обоих операндовкак указано в следующих правилах:

Если один из операндов имеет тип double, другой преобразуется в двойной.

В противном случае, , если один из операндов имеет тип float, другойпреобразуется в число с плавающей точкой.

В противном случае, если один из операндов имеет тип long, другой преобразуется в long.

В противном случае оба операнда преобразуются в тип int.

Это смущает меня, потому что оба http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.html и https://alvinalexander.com/java/java-int-double-float-mixed-type-division-arithmetic-rules

утверждают, что

Все значения с плавающей запятой (с плавающей и двойной) в арифметической операции(+, -,*, /) преобразуются в двойной тип перед выполнением арифметической операции.

Насколько я понимаю, согласно JLS, добавление 1 числа с плавающей точкой и 1 целого числа приведет к плавающему числу.Однако, согласно другим источникам, добавление 1 числа с плавающей запятой и 1 целого числа приведет к двойному значению?

1 Ответ

2 голосов
/ 03 апреля 2019

Когда источник предъявляет претензии, противоречащие JLS, велика вероятность, что это неправильно.В этом случае следующее демонстрирует поведение, которое описывает JLS:

    Number n = 1 + 0.1f;
    System.out.println(n instanceof Float); // true
    System.out.println(n instanceof Double); // false
...