我的代码中遇到了一个非常奇怪的问题。我有一个简单的温度转换器,用户输入摄氏温度,按“转换”后,显示华氏温度。如果用户没有输入有效的内容(任何不是数字或小数的内容),则会显示错误对话框。代码:
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”)而不是任何其他字母。我很难过这个。为什么只有这两个字母放在一个数字后会导致异常不被抛出并继续计算?
答案 0 :(得分:15)
某些语言允许您在数字文字后面添加字母以表示它是什么类型。
如果您只是写12.3
,它可能不知道它是浮点数还是双精度数(或者它必须推断或转换它)。
您的号码解析器必须接收这些字母。
12.3d
12.3
为double
12.3f
12.3
为float
答案 1 :(得分:6)
Java将123f
等数字解释为将float
和123d
称为double
,而普通123
则表示int
。
答案 2 :(得分:5)
阅读parseDouble
支持的number format上的文档。 f
和d
是 FloatTypeSuffix 的实例。