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

Android Discussion :

Convertir un nombre formaté en nombre avec décimales.


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 27
    Points
    27
    Par défaut Convertir un nombre formaté en nombre avec décimales.
    Bonjour,

    J'ai un nombre formaté selon le pays de l'utilisateur via cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private String nft(double d){
    		// Formate les nombres selon le pays avec 2 decimales
    		Locale fmtLocale = Locale.getDefault();
    		NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
    		formatter.setMaximumFractionDigits(2);
    		formatter.setMinimumFractionDigits(2);
     
    		return formatter.format(d);
     
    	}
    Comment puis-je faire pour revenir en arrière ? C'est-à-dire passer du nombre formaté en String à un nombre qui me permette de faire un calcul. Par exemple :

    Pour ce nombre : 1000.00
    - France 1 000,00
    - US 1,000.00

    La fonction citée plus haut me permet de convertir le nombre au format local. Mais ce nombre est dans un champ de saisie et peut être modifié. Dès qu'il y a une saisie je souhaite récupérer ce nombre pour faire un calcul. Existe t-il une fonction native ou autre qui me permette cela ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formatter.parse(lachaine);

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 27
    Points
    27
    Par défaut merci
    Merci tchize_ ça fonctionne très bien.

    Par contre je me trouve avec un autre problème, puisque l'on peut saisir une donnée avec un point dans ce champ.

    Je m'explique :

    J'ai deux champs de saisie A et B.
    Quand je saisi une donnée dans A (avec un point ou pas), B affiche un résultat Formaté.
    Si je saisi dans B alors A affiche un résultat Formaté.
    Problème : quand je saisi dans A avec un point les chiffres après la virgule ne sont pas traités ou l'application s'arrête selon la version du système.

    Voici mes 2 fonctions :

    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
    private String nft(double d){
    		// Formate les nombres selon le pays avec 2 decimales
    		Locale fmtLocale = Locale.getDefault();
    		NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
    		formatter.setMaximumFractionDigits(2);
    		formatter.setMinimumFractionDigits(2);
     
    		return formatter.format(d);
     
    	}
     
    	private Double backCurrency(String s){
    		// Renvoi le nombre pour les calculs java
    		Locale fmtLocale = Locale.getDefault();
    		NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
     
    			Number so = null;
     
    			try {
    				so = formatter.parse(s);
     
    			} catch (ParseException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		return so.doubleValue();
    	}
    Appelées comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    double ht = 0.0;
    		EditText spinHT = (EditText)findViewById(R.id.htamount);
    		String temp = spinHT.getText().toString();
     
    		if(temp.matches("")){
    			Log.e("ht rien : ", temp);
    		}
     
    		else{
    			ht = backCurrency(temp);
    		}
    			Log.e("ht . : ", String.valueOf(ht));
    Vu que quand je saisi le texte n'est pas formaté l'erreur est là, mais comment faire pour savoir s'il est formaté ou pas pour appeler tel ou tel fonction ?

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    d'abord tu utilise la locale par défaut. Cela veux dire que le . et la , auront un comportement variable suivant la langue / configuration de l'OS.

    Pour être certains, déjà, je commencerais par afficher ceci quelque part:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Locale fmtLocale = Locale.getDefault();
    NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
    System.out.println(formatter.format(1234567.890123));
    Histoire qu'on parle bien du même format de nombre

    Il faudrait aussi des exemple concret de ce que tu tappe dans A, que tu obtiens dans B, tes messages d'erreur, etc.

    Enfin, je ne comprends pas ta phrase:
    Vu que quand je saisi le texte n'est pas formaté l'erreur est là, mais comment faire pour savoir s'il est formaté ou pas pour appeler tel ou tel fonction ?
    Tu peux reformuler?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    B = A + 10% Donc A = B - 10 %

    Exemple dans A je saisi : 10.50
    Je récupère les (10.50 + (10.5 * 10%)) pour obtenir les 11,55
    Hors dans B j'obtient 11,00 d'après ceci seul les chiffres avant les décimales ont servi au calcul.

    Puis si je vais dans B et commence à changer les valeurs, Alors A affiche bien le résultat voulu et formaté (fonction nft()). Car B est formaté.

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Dans backCurrency tu peux logger ce que contient s ainsi que la valeur de so ?

    Désolé, je viens seulement de voir que c'est du android et ce n'est pas trop mon domaine d'expertise les classes d'android

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Oui je viens de sortir un log et voici les résultats :

    J'ai saisi 10.99

    s = 10.99
    so = 10

    Il y aurait une virgule (c-a-d formaté) il n'y aurait pas de souci. Il faudrait que je sache si le champ est formaté ou non. S'il ne l'ai pas alors j'utilise la fonction de formatage nft() et le problème est réglé je pense à moins que je passes à côté de quelque chose

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Même si je n'ai pas de solution pour la 2ème question, la 1ère étant l'origine du post, le sujet est résolu.

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

Discussions similaires

  1. Convertir un nombre format hexadécimal au format décimal
    Par ranza dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 19/05/2013, 13h12
  2. Réponses: 5
    Dernier message: 14/06/2012, 10h31
  3. Réponses: 4
    Dernier message: 01/01/2010, 20h25
  4. [Nombre]formater le nombre de décimal après une virgule.
    Par PascalCmoa dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/03/2007, 10h40

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