2017-09-29 9 views
0

Je suis nouveau ici et aussi en codant, je fais mon projet de conclusion de cours et j'ai des difficultés à trouver où est l'erreur. Fondamentalement, mon code sont:JTextField converti en Double retournant NaN

kilograms = Double.parseDouble(kgTextField.getText()); 
meters = Double.parseDouble(metersTextField.getText()); 
pounds = Double.parseDouble(poundsTextField.getText()); 
inches = Double.parseDouble(inchesTextField.getText()); 
result = (kilograms)/(meters * meters);  
resultTextField.setText(String.format("%,.2f", result)); 

Le résultat me donne une valeur NaN et je ne trouve pas où est l'erreur. Je fais la conversion de la chaîne en double dans les variables mais ne fonctionne toujours pas. Quelqu'un peut-il me donner une lumière?

Vive

+0

besoin de plus pour trouver le code erreur – XtremeBaumer

+2

Qu'est-ce que vous fosse dans les champs de texte?Et pourquoi votre code se réfère-t-il aux livres et aux pouces quand il est utilisé et non pertinent? S'il vous plaît poster un [mcve] - suivez le lien pour savoir ce que cela signifie. –

+2

'NaN' est produit lorsque les deux' kilogrammes' et '(meters * meters)' sont '0,0'. –

Répondre

0

"NaN" signifie "pas un nombre". Il est produit si une opération à virgule flottante a des paramètres d'entrée qui provoquent l'opération pour produire un résultat indéfini. Par exemple, 0,0 divisé par 0,0 est arithmétiquement indéfini. Prendre la racine carrée d'un nombre négatif est également indéfini.

citation tirée de this question

Dans votre cas, vous devez vérifier si les valeurs obtenues à partir des champs de texte sont valides et traiter les valeurs non valides en conséquence.

ex. mètres doit être! = 0

le morceau de code ci-dessous est tiré de java.lang.Double et illustre les résultats possibles de la division d'une valeur double par 0,0

/** 
* A constant holding the positive infinity of type 
* {@code double}. It is equal to the value returned by 
* {@code Double.longBitsToDouble(0x7ff0000000000000L)}. 
*/ 
public static final double POSITIVE_INFINITY = 1.0/0.0; 

/** 
* A constant holding the negative infinity of type 
* {@code double}. It is equal to the value returned by 
* {@code Double.longBitsToDouble(0xfff0000000000000L)}. 
*/ 
public static final double NEGATIVE_INFINITY = -1.0/0.0; 

/** 
* A constant holding a Not-a-Number (NaN) value of type 
* {@code double}. It is equivalent to the value returned by 
* {@code Double.longBitsToDouble(0x7ff8000000000000L)}. 
*/ 
public static final double NaN = 0.0d/0.0; 
0

thx pour vos réponses et je suis désolé Je n'ai pas posté assez de code pour identifier l'erreur, comme je l'ai dit je suis encore débutant hehehe

Mon erreur était que j'insère les variables dans une autre section, donc le système identifiait mes variables comme "0.00" retourne-moi une erreur NaN.

C'est corrigé maintenant.

Merci encore!

0

JTextField converti en Double retour NaN

conversions Cast sont bien définis. Vous n'avez pas à deviner, il suffit de vérifier le JLS. (int, float & long) pour doubler est une conversion d'élargissement.

double résultat privé;

private double result; 
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {          
    double kilograms = 0.0; 
    double meters = 0.0; 
    if (meters > 0) { 
     result = (kilograms)/(meters * meters); 
    } else { 
     result = 0.0; //As you wish to store except NaN 
    } 
    jTextField1.setText("" + result); 
    } 

Conversion d'un int ou une longue valeur à flotter, ou d'une longue valeur à doubler, peut entraîner une perte de précision qui est, le résultat peut perdre certains des bits les moins significatifs du valeur. Dans ce cas, la valeur à virgule flottante résultante sera une version correctement arrondie de la valeur entière, en utilisant le mode arrondi au plus proche IEEE 754.

Vive