Retour/conversion de type de données primitifs

Résolu
chris081 Messages postés 90 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 4 février 2009 - 17 janv. 2009 à 03:32
 Utilisateur anonyme - 18 janv. 2009 à 18:25
Bonsoir

Avant d'exposer 'mon' 'problème', je tiens à ce que le lecteur sache que je sais ce qui suit:

-un int + [byte, char et/ou short] retournera un int;
-un int + [long ou double ou float] retournera le type de données pouvant contenir le plus grand nombre (double > float > long);
-que fm.getHeight() retournera une valeur de type int, lorsque fm contient une reference vers un objet de type FontMetrics (javadoc);
-que rect.getHeight() retournera une valeur de type int, lorsque rect contient une reference vers un objet de type Rectangle (javadoc);
-et que cbo.getY() retournera une valeur de type int, lorsque cbo contient une reference vers un objet de type JComboBox (javadoc).

Alors mon problème est le suivant: lorsque je compile le code qui suit, j'obtient une erreur de type possible loss of precision

found:double

required:int

// bon, ici on a les instructions import, declaration de class, etc...

private JComboBox cbo;

private Rectangle rect;

public void init (){

this.cbo = new JComboBox (new String {"a","b","c"});

// ici, on crée les panels, ajout les objects GUI sur ces derniers, etc...

this.rect = cbo.getBounds();

} // fin init()


public void paint(Graphics g){

super.paint(g);

FontMetrics fm = g.getFontMetrics();

int y = fm.getHeight() + rect.getHeight() + this.cbo.getY();

} // fin paint(Graphics)

Alors si quelqu'un pouvais m'expliquer et/ou me diriger vers un site qui explique ce qui fait que j'obtiens une erreur, ca serait apprécié.


Merci

chris081

3 réponses

Utilisateur anonyme
18 janv. 2009 à 02:27
Bonjour,





/*









Les conversions implicites ne sont autorisées que dans ce sens





(de la pécision la plus petite à la plus grande):







             [char]



                    \





                      --> [int] --> [long] --> [float] --> [double]



                    /





[byte] --> [short] /







Ce qui signifie que nimporte quelle primitive peut être convertie implicitement en double,





que nimporte primitive sauf double peut l'être en float,





que nimporte primitive sauf float et double en long,





que nimporte primitive sauf long, float et double en int,





que short peut l'être en byte et int en byte.







Exemples :







*/








char


donneeC =

'a'



;



byte



donneeB =1;



short



donneeS = 2;



int



donneeI = 3;



long



donneeL = 4;



float



donneeF = 5;



double


donneeD = 6;

donneeD = donneeC;

// ok






//donneeC = donneeD; // possible loss of precision



System.out.println(

"donneeD = "

+ donneeD);


// = 97.0


donneeD = donneeB;



//donneeB = donneeD; // possible loss of precision



System.out.println(

"donneeD = "

+ donneeD);


// = 1.0



donneeD = donneeS;
System.out.println(


"donneeD = "

+ donneeD);


// = 2.0



donneeD = donneeI;
System.out.println(


"donneeD = "

+ donneeD);


// = 3.0



donneeD = donneeL;
System.out.println(


"donneeD = "

+ donneeD);


// = 4.0



donneeD = donneeF;
System.out.println(


"donneeD = "

+ donneeD);


// = 5.0



donneeF = donneeC;
System.out.println(


"donneeF = "

+ donneeF);


// = 97.0





//donneeF = donneeD; // possible loss of precision



donneeI = donneeC;
System.out.println(


"donneeI = "

+ donneeI);


// = 97






// etc...







Cordialement,
...\ Dan /...
3
chris081 Messages postés 90 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 4 février 2009
18 janv. 2009 à 16:17
Salut
Merci d'avoir reponds.
Si je comprends bien, lorsqu'on change un double, (64 bits) par exemple en int (32 bits), il y a une difference de -32bits pour le double, donc la jvm n'autorise pas car il y a perte de precision?


<hr width="100%" />

Est-ce que les femmes pètent autant que les hommes ?
Oui. Cependant, les hommes semblent en tirer plus de gloire que les femmes.

Retrouvez l'intégrale ici
0
Utilisateur anonyme
18 janv. 2009 à 18:25
Oui, idem pour float et long.

cependant rien n'empèche de convertir le double en String:
String mon_String = Double.toString(mon_double);

ensuite ce String en int:
int mon_int = Integer.parseInt(mon_String);
à condition de supprimer les décimales (arrondi ou autre)
mais c'est pas jojo!

...\ Dan /...
0
Rejoignez-nous