Исключение к исключению формата номера с "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.