"D"和"F"引起的数字格式异常是什么?

12

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

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")时发生,而不是其他任何字母。我对此感到困惑。为什么只有这两个字母在数字后面会导致异常未被抛出并进行计算?


4
这个链接中有详细的解释:http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#valueOf(java.lang.String),请参考。 - Alexis C.
3个回答

15

一些编程语言允许您在数字字面量后添加字母以表示其数据类型。

如果您仅写了12.3,它可能无法确定它是浮点数还是双精度浮点数(或者必须推断或转换它)。

您的数字解析器必须捕获这些字母。

  • 12.3d 表示 double 类型的 12.3
  • 12.3f 表示 float 类型的 12.3

3
为了避免这种情况发生,最好使用DecimalFormat来解析您的输入 - http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html - radai
哦,好的,那就解释了。谢谢你澄清这个问题。多有趣啊。 - ninge

6

Java将像123f这样的数字解释为float,而将123d解释为double,而普通的123表示一个int


5

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接