Исключение к исключению формата номера с "D" и "F"?

У меня возникла очень странная проблема в моем коде. У меня есть простой температурный преобразователь, в котором пользователь вводит температуру в градусах Цельсия, а после нажатия "Преобразовать" отображается температура в Фаренгейте. Если пользователь не вводит что-либо действительное (все, что не является числом или десятичным), отображается диалоговое окно с ошибкой. Код:

btnConvert.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                String tempFahr = (String) enterDegreesC.getText();
                double tempF = Double.valueOf(tempFahr);
                double tempFConverted = tempF * 1.8 +32;            
                displayDegreesF.setText(tempFConverted + " Farenheit");
            }
            catch (NumberFormatException nfe) {
                JOptionPane.showMessageDialog(frmTemperatureConverter, "Please Enter a Number.", "Conversion Error", JOptionPane.ERROR_MESSAGE);                    
            }               
        }
    });

Довольно простой и простой код и хорошо работает, за исключением одного. Когда я ввожу комбинацию числа, за которым следуют буквы "f" или "d", не отображается диалоговое окно с ошибкой, а температура в градусах Фаренгейта вычисляется с использованием цифры спереди на букву. Это ТОЛЬКО происходит с "d" и "f" (и "D" и "F" ), а не с другой буквой. Я в тупике. Почему только эти две буквы, помещенные после цифры, вызывают исключения, которые не будут выбрасываться, и расчет для продолжения?

Ответ 1

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

если вы просто написали 12.3, он может не знать, является ли это поплавком или двойным (или он должен был бы сделать вывод или бросить его).

Ваш парсер номера должен подбирать эти буквы.

  • 12.3d - 12.3 как double
  • 12.3f 12.3 как float

Ответ 2

Java интерпретирует числа типа 123f как относящиеся к float и 123d как double, тогда как plain 123 означает int.

Ответ 3

Прочитайте документацию в формате число, поддерживаемую parseDouble. f и d являются экземплярами FloatTypeSuffix.