IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Représentation normalisée des nombres flottants


Sujet :

Langage Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut Représentation normalisée des nombres flottants
    bonjour, mon exercice est :
    Comportement attendu
    Attention, il importe que votre programme respecte strictement les formats et comportements présentés ici.

    Le programme accepte un nombre décimal suivi d'un retour chariot et affiche la représentation normalisée suivie d'un retour chariot. Si l'entrée ne contient pas un nombre décimal ou contient un nombre décimal mal formé, le programme doit afficher une ligne terminant par 'Erreur' suivi d'un retour chariot.
    Exemples

    entrée: 0
    sortie: 0

    entrée: 5
    sortie: 0.5e1

    entrée: 100
    sortie: 0.1e3

    entrée: 0.55
    sortie: 0.55

    entrée: 0.007
    sortie: 0.7e-2

    entrée: -10.00
    sortie: -0.1e2

    entrée: -01020.03040
    sortie: -0.10200304e4
    Fin exercice

    NB/ La forme normalisée à utiliser dans ce TP est "0.XXXeYYY" qui peut être précédée du signe moins (-) où :

    XXX (appelée mantisse) est une séquence de chiffres de 0 à 9 qui ne doit ni commencer ni se terminer par un 0.
    YYY (appelé exposant) est une séquence de chiffres de 0 à 9 qui ne doit pas commencer par un 0 et qui peut être précédée du signe moins (-).
    Si le nombre à représenter vaut 0, la forme normalisée est juste "0" (sans signe ni exposant).
    Si l'exposant vaut zéro, la partie exposant (incluant le 'e') est omise (la forme normalisée est juste "0.XXX" éventuellement précédée du signe moins).

    Le code que j'ai fait jusqu'à présent est (juste la lecture de l'entrée clavier et tester si un nombre ou pas, reste comment traduire ce nombre souos la forme demandée?):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    import java.text.ParseException;
     
     
    public class INF2170_TP1 {
    //final String s_TP_Name = "INF2170_TP1";
     
    	/**Cette fonction teste si la valeur donnée
             * en String est numérique ou pas
             * @param p_Number de type String
             */
    static boolean is_number(String p_Number){
    	boolean b_Number = false;
     
    	NumberFormat format = new DecimalFormat();
     
    	try {
    		format.parse(p_Number).doubleValue();
    		b_Number = true;
    	} catch (ParseException e) {
    		b_Number = false;
    	}
     
    	return b_Number;
    }
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		System.out.println("INF2170_TP1");
    		System.out.println("Veuillez donner un nombre décimal: ");
     
    		// pour récupérer les données user et les mettre en mémoire
    		InputStreamReader s_val_in = new InputStreamReader(System.in);
    		BufferedReader s_val_tampon = new BufferedReader(s_val_in);
     
    		// pour récupérer les données de la mémoire
    		String s_str = null;
     
    		try {
    			s_str = s_val_tampon.readLine();
     
    			if (!is_number(s_str)){
    				System.out.println("la valeur " + s_str + " n'est pas un nombre");
    			}
    			else{
    				System.out.println("Vous avez donné: " + s_str);
    			}
    		} catch (IOException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    		}
     
     
    	}
    }
    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Points : 1 212
    Points
    1 212
    Par défaut
    Bonjour,

    Tu veux que l'on fasse l'exercice à ta place, ou bien tu as une question précise, concernant un problème précis ?

    Mako.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Beuh, dans mon pays, la notation normalisée c'est X.XXXeYYYY

    Je ne crois pas qu'on puisse avoir la forme demandée avec des DecimalFormat ou un Formatter.
    D'ailleurs, vu qu'on ne sait pas à quelle précision afficher la sortie, je ne pense pas non plus qu'on puisse l'afficher après avoir parsé l'entrée sous forme de float ou double.

    Exemple, le double obtenu en parsant 0.55 vaut en fait 0.5500000000000000444 et des poussières. Tant qu'on ne va pas à cette précision ça va, mais comment décide-t-on à quelle précision on va ?

    Personnellement je laisserais tomber la notion de flottant, je parserais les nombres sous forme de BigDecimal et me contenterais d'afficher :
    - signe moins si nécessaire,
    - 0,
    - les chiffres de la mantisse,
    - e et l'exposant correct si différent de zéro.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    ok merci j'ai trouvé la solution.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Hum. C'est une question ouverte qui pique la curiosité. Tu ne veux pas partager ? Ou au moins parler de ta solution ?

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut Représentation normalisée des nombres flottants
    Pardon, j'ai pas vu ta question.
    Bon la solution était simple, je parcours la chaine et je décale le séparateur à gauche et je compte jusqu'à j'arrive à la fin du nombre (qui est string), je concatène toute la chaîne à "0." et enfin je concatène "e" et le nombre de chiffres parcouru à gauche.

    Merci quand même pour votre intention

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calculer le total des nombres flottant (map)
    Par Leptitjour dans le forum Débuter
    Réponses: 2
    Dernier message: 28/09/2014, 18h08
  2. Réponses: 1
    Dernier message: 05/12/2011, 10h25
  3. représentation des nombres a virgules fixe en systemC
    Par MohEllayali dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 10/03/2009, 22h50
  4. stockage des nombres à virgule flottante
    Par Alexdezark dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 24/11/2008, 10h43
  5. Limitation des nombres flottants
    Par oxyde356 dans le forum Moteurs 3D
    Réponses: 11
    Dernier message: 11/05/2008, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo