CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Ouais. Mais pourquoi ?

Neyce
Neyce
Niveau 8
10 novembre 2013 à 00:57:47

Bonsoir. Après un précédent TP portant sur le classique résolvateur de trinôme du second degré je me suis lancé dans un truc bien plus simple mais pourtant je suis bloqué.

Un autre classique : Le convertisseur de degrés Celsius en Fahrenheit et inversement.

Bon, en gros le code est terminé mais les calculs n'affichent pas le bon résultat alors que je suis la formule.

De C à F : [°C] x 9/5 + 32

De F à C : ([°F] - 32) x 5/9

Par exemple pour une température de 5 degrés F je devrais avoir -15 degrés C. Mais non mon programme lui m'affiche -0.00 alors WTF ?

Je poste la partie du code correspondante au calcul :

----------------

double t = sc.nextDouble();
double a = ((t)-32)*(5/9);
out.printf("\n%.2f degrés Fahrenheit équivaut à %.2f degrés Celsius.",t,a);

---------------
Qu'est ce que je ne vois pas ?

( Je sens la bonne grosse erreur de noob arriver...)

godrik
godrik
Niveau 30
10 novembre 2013 à 01:35:47

Pour completer la reponse de gamer, 5/9 fait une division entiere parceque les deux operand sont des entiers. Tu veux en faite une division flottante. Pour que la division soit flottante Il faut qu'une des deux operandes soient floatante. Donc 5.0/9.0 marche, mais aussi 5.0/9 ou 5/9.0 ou encore ((float)5)/9

_skip
_skip
Niveau 10
10 novembre 2013 à 09:18:16

Et aussi, il est bien de prendre l'habitude de nommer les variables correctement. Si tu dois te repérer dans un code plus complet avec des variables qui s'appellent "a b c d e f j k l" et qu'en plus tu as écrit il y a 6 mois, c'est pas la joie.

Neyce
Neyce
Niveau 8
10 novembre 2013 à 12:57:38

Okay effectivement. Mais pourquoi est ce qu'il faut systématiquement un float pour que ça fonctionne ? Double est pratiquement identique à Float non, si ce n'est qu'il ne dispose pas de suffixe ?

Skip :p) Ouais, je débute donc niveau propreté du code, c'est pas encore ça en effet, pour l'instant je suis déjà content d'écrire des programmes des qui fonctionnent :noel:

Néanmoins oui, tu as raison. Mais quand tu dis "correctement" tu peux détailler ? :)

_Toastation_
_Toastation_
Niveau 9
10 novembre 2013 à 16:01:13

Bah "correctement" ce serait un nom qui ait un rapport avec l'utilité de la variable. Par exemple dans ton programme t serait plutot "numberTyped" et a serait "result".

Neyce
Neyce
Niveau 8
10 novembre 2013 à 17:59:57

Ouais je pensais avoir comprit j'ai amélioré l'incrementation du code et renommé ça en "température" et "conv" il s'agissait just de rendre tout ça plus clair. :)

_skip
_skip
Niveau 10
11 novembre 2013 à 08:13:36

Perso j'aurai sûrement utilisé celsius et fahrenheit car ensuite le code et son but deviennent clairs au premier coup d'oeil.
Mais n'importe quoi qui te semble approprié pour une personne qui lit ton programme pour la première fois peut faire l'affaire.

Watkos
Watkos
Niveau 9
11 novembre 2013 à 10:57:50

Double et float diffèrent par leur précision.
Un double est ainsi plus précis qu'un float. Je cite : "Un float est codé sur 32 bits, un double est codé sur 64 bits". (recherche google)
Pour ton programme ça n'a pas grand importance donc :)

guyver2
guyver2
Niveau 10
11 novembre 2013 à 11:01:36

"Okay effectivement. Mais pourquoi est ce qu'il faut systématiquement un float pour que ça fonctionne ? Double est pratiquement identique à Float non, si ce n'est qu'il ne dispose pas de suffixe ? "

Avec des doubles ca aurai marché aussi, tu aurais juste eu plus (trop ?) de precision, c'est a toi de voir si ton resultat necessite 10 ou 50 chiffres appres la virgules pour etre pertinent.
Le soucis ici c'est que tu utilises des int dans ta division.
Le fait que tu mettes le resultat dans un double a la fin (double a = ...) ne veut pas dire que tous les nombres qui interviennent dans le calcul seront converti en doubles. Les calculs sont fait par bloc en concervant la plus grande precision necessaire :
double a = (t-32)*(5/9)
(t-32) est de type (double - int), le resultat sera un double
(5/ 9) est de type (int / int) et donc le resultat sera un int, en l'occurence la partie entiere de la division de 5 par 9 (pas d'arrondis), soit 0.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment