“D”和“F”的数字格式exception的例外情况?

我的代码中遇到了一个非常奇怪的问题。 我有一个简单的温度转换器,用户输入摄氏温度,按“转换”后,显示华氏温度。 如果用户未输入有效的内容(任何不是数字或小数的内容),则会显示错误对话框。 码:

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”)而不是任何其他字母。 我很难过这个。 为什么只有这两个字母放在一个数字后会导致exception不被抛出并继续计算?

某些语言允许您在数字文字后面添加字母以表示它是什么类型。

如果你只是写了12.3 ,它可能不知道它是浮点数还是双精度数(或者它必须推断或转换它)。

您的号码解析器必须接收这些字母。

  • 12.3d12.3double
  • 12.3ffloat 12.3

Java将像123f这样的数字解释为引用float而将123ddouble ,而plain 123表示int

阅读有关parseDouble支持的数字格式的文档。 fdFloatTypeSuffix的实例。