Exception au format numérique Exception avec “D” et “F”?

J’ai rencontré un problème très étrange dans mon code. J’ai un convertisseur de température simple dans lequel l’utilisateur entre la température en Celsius et, après avoir appuyé sur “Convert”, la température en Fahrenheit est affichée. Si l’utilisateur n’entre pas quelque chose de valide (tout ce qui n’est pas un nombre ou une décimale), une boîte de dialog d’erreur s’affiche. Code:

btnConvert.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { Ssortingng tempFahr = (Ssortingng) 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); } } }); 

Code assez simple et simple et fonctionne bien, sauf pour une chose. Lorsque je saisis une combinaison d’un nombre suivi des lettres “f” ou “d”, aucune boîte de dialog d’erreur ne s’affiche et la température en degrés Fahrenheit est calculée à l’aide du chiffre situé en avant de la lettre. Cela se produit UNIQUEMENT avec “d” et “f” (et “D” et “F”) et pas n’importe quelle autre lettre. Je suis perplexe sur celui-ci. Pourquoi est-ce que seules ces deux lettres placées après un chiffre empêchent la levée des exceptions et permettent un calcul?

certaines langues vous permettent de mettre des lettres après les littéraux numériques pour indiquer le type.

si vous écrivez simplement 12.3 , il se peut qu’il ne sache pas s’il s’agit d’un float ou d’un double (ou s’il doit en déduire ou le lancer).

Votre parsingur de numéros doit être en possession de ces lettres.

  • 12.3d est 12.3 en double
  • 12.3f est 12.3 tant que float

Java interprète les nombres tels que 123f comme faisant référence à un float et 123d à un double , alors que 123 signifie un int .

Lisez la documentation sur le format de nombre pris en charge par parseDouble . Les f et d sont des instances de FloatTypeSuffix .