Назад к вопросам
Junior
82
questionbank

Работает ли конструкция switch с типами double или float?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Нет, в Java конструкция switch не работает напрямую с типами double или float.

Причина в том, что числа с плавающей точкой имеют неточное представление в памяти компьютера. Сравнение таких чисел на прямое равенство (==) может привести к непредсказуемым результатам из-за погрешностей.

switch требует точного совпадения значения для выбора ветки выполнения. Типы, которые поддерживаются в switch, это примитивные целочисленные типы (byte, short, char, ``int), соответствующие им обертки (Byte, Short, Character, Integer), перечисления (Enum) и тип String` (начиная с Java 7).

Для сравнения значений double или float можно использовать условные операторы if/else if/else. При этом для сравнения на равенство рекомендуется использовать заданную погрешность (epsilon).

double value = 10.5;
double epsilon = 0.0001;

if (Math.abs(value - 10.5) < epsilon) {
    // Действие для value == 10.5
} else if (Math.abs(value - 5.0)< epsilon ) {
    // Действие для value == 5.0
} else {
    // Действие для других значений
}