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

Java Discussion :

Chiffres significatifs dans un nombre


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut Chiffres significatifs dans un nombre
    Bonjour !

    Mon problème : Je dois déterminer le nombre de chiffres significatifs dans un float. (J'ai déjà un algo sous la main qui fait ça mais je n'y fait pas vraiment confiance, pour preuve je viens d'y trouver un bug )

    Plutôt que de debugger et risquer d'oublier d'autres cas, n'y a t'il pas une méthode dans l'API java qui fasse ça?

    J'ai regardé dans la classe Math et dans Float, mais je n'ai rien trouvé !

    Donc les résultats que je voudrai obtenir :
    0.33 -> 2
    432.1 -> 4
    0 -> 0
    4444 -> 4
    ...

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je trouve ça dangereux, les "chiffres significatifs" d'un float.

    Un float n'est pas très doué pour représenter des nombres décimaux avec moins d'une infinité de chiffres après la virgule. Un BigDecimal je veux bien, un float c'est pas top.

    Mais bref, là, comme ça je ferais un petit String.valueof(float), j'enlève la virgule, j'enlève les zéros du début, et je compte ce qui reste.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 766
    Par défaut
    Non ça n'existe pas comme ça, il y a bien des méthodes du type scale() ou precision() dans BigDecimal, mais cela ne fait pas exactement ça.

    Il va falloir le coder toi même...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut
    OK merci pour vos réponses, effectivement je crois que je vais devoir passer par du code perso !

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je renouvelle ma remarque comme quoi les nombres de chiffres des float ne sont pas souvent finis, et qu'une telle information n'est pas fiable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut
    Oui j'ai noté mais l'API qu'on utilise sur notre projet (API PDMLink) impose l'utilisation de leur type FloatValue pour l'enregistrement/chargement de certaines données dans leur BDD.

    Après avoir re-consulté le code, j'ai vu que le type à fournir n'était pas un float mais un double, du coup je sais pas si c'est mieux....

    Enfin entre temps j'ai fait une découverte sympathique, c'est que si on y donne une précision de 0, il la calcule tout seul comme un grand ! Du coup j'ai pu simplifier le code et le rendre plus fiable en même temps !

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut
    Moi, j'utiliserai les expressions régulières pour cela.

    Voir les classes Pattern et Matcher...

    Citation Envoyé par legentil Voir le message
    Bonjour !

    Mon problème : Je dois déterminer le nombre de chiffres significatifs dans un float. (J'ai déjà un algo sous la main qui fait ça mais je n'y fait pas vraiment confiance, pour preuve je viens d'y trouver un bug )

    Plutôt que de debugger et risquer d'oublier d'autres cas, n'y a t'il pas une méthode dans l'API java qui fasse ça?

    J'ai regardé dans la classe Math et dans Float, mais je n'ai rien trouvé !

    Donc les résultats que je voudrai obtenir :
    0.33 -> 2
    432.1 -> 4
    0 -> 0
    4444 -> 4
    ...

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ah bon ? Va falloir donner un exemple, là...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par défaut
    Je n'est pas trouvé la solution avec les expressions régulières mais je suis persuadé que ça doit marché.
    En attendant, voici une solution alternative:


    String sval = "010.444";
    String sAux = sval;
    while(sAux.endsWith("0")) {
    sAux = sAux.substring(0, sAux.length()-1);
    }
    while(sAux.startsWith("0")) {
    sAux = sAux.substring(1);
    }
    if(sAux.contains("."))
    sAux = sAux.replace(".", "");
    if(sAux.contains(","))
    sAux = sAux.replace(",", "");

    System.out.println("Chiffres signifficatifs : " + sAux.length());
    Citation Envoyé par thelvin Voir le message
    Ah bon ? Va falloir donner un exemple, là...

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par pjmorce Voir le message
    Je n'est pas trouvé la solution avec les expressions régulières mais je suis persuadé que ça doit marché.
    Que quoi doit marcher ? Compter quelque chose avec des expressions régulières se limite à compter le nombre de correspondances d'un texte avec cette expression. Et c'est le programmeur qui doit le faire, pas l'expression régulière.

    Pour ton exemple, il y avait moyen de faire un peu plus efficace... Sorti de ça, c'est exactement ce que j'avais proposé, hein -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/07/2014, 09h44
  2. Réponses: 9
    Dernier message: 03/11/2010, 17h36
  3. nombre de chiffres significatifs variable
    Par kamouminator dans le forum C
    Réponses: 4
    Dernier message: 07/11/2006, 14h14
  4. Réponses: 11
    Dernier message: 18/07/2006, 11h03
  5. nombre de chiffres significatifs
    Par pianpif dans le forum Langage
    Réponses: 4
    Dernier message: 06/07/2006, 08h51

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