"D"和"F"的数字格式异常的例外情况?

nin*_*nge 12 java swing parsing button numberformatexception

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

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);                    
            }               
        }
    });
Run Code Online (Sandbox Code Playgroud)

相当直接和简单的代码,除了一件事,效果很好.当我输入数字后跟字母"f"或"d"的组合时,不显示错误对话框,并使用字母前面的数字计算华氏温度.这只发生在"d"和"f"(和"D"和"F")而不是任何其他字母.我很难过这个.为什么只有这两个字母放在一个数字后会导致异常不被抛出并继续计算?

Sam*_*ica 15

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

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

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

  • 12.3d12.3一个double
  • 12.3f12.3一个float

  • 为了避免这种情况,你最好使用DecimalFormat来解析你的输入 - http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html (3认同)

Ypn*_*ypn 6

Java将数字解释123f为引用a float123da double,而plain则123表示int.


Chr*_*ung 5

阅读有关支持的数字格式的文档parseDouble.该fd是实例FloatTypeSuffix.