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

API standards et tierces Java Discussion :

[Débutant][Math] float int arondi bizarre


Sujet :

API standards et tierces Java

  1. #1
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut [Débutant][Math] float int arondi bizarre
    Bonjour,

    Juste une question toute bête :
    J'ai besoin de récupérer les entiers et décimal d'un float pour afficher le prix de type : <entier> Euros <décimal>
    J'utilise ces deux lignes de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int entier = new Float(num).intValue();
    int decimal = new Float((num - entier)*100).intValue();
    System.out.println(entier + "Euros" + decimal);
    Bizarrement quand j'ai num = 289,4 en entrée, il me sort :
    289 Euros 39 ?

    Je comprend pas pourquoi le décimal ne donne pas 40.

    Quelqu'un voit d'ou ca peut venir?

    Merci
    Etre c'est etre relatif.

  2. #2
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Bonjour,
    Les float(Float) et double(Double) ne sont pas faits pour des calculs mathématiques précis. Ces erreurs sont présentes dans tout langage de programmation.
    Pour java, il faut utiliser des classes comme BigDecimal, ou faire tes calculs avec des valeurs entières puis gerer l'affichage(virgule, arrondi, etc.).
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  3. #3
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Le probleme c'est que le prix vient d'une base de données et que le type est un NUMERIC(15,2), je peux utiliser BigDecimal dans ces cas la ?

    Merci
    Etre c'est etre relatif.

  4. #4
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Bonjour,
    BigDecimal peux prendre en argument du constructeur un String, donc il n'y a pas de problème
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  5. #5
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Bizarrement j'obtient les même problèmes:

    num = new BigDecimal(289.4);

    System.out.println(num.subtract(new BigDecimal(num.shortValue())).movePointRight(2).intValue());

    Et la j'obtient un jolie 39 au lieu de 40 .

    Vous auriez pas un exemple.

    Merci.
    Etre c'est etre relatif.

  6. #6
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Bon comme je n'ai pas trouvé de manière de le faire proprement, j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int entier = new Double(num).intValue();
    int decimal = new Double(Math.round(num * 100)).intValue();
    Je n'ai pas vu de gain à utiliser BigDecimal si ce n'est qu'il faut appeler moulte méthode et que, dans ce cas, je préfère utiliser des types plutot que des Objets.

    Merci quand même
    Etre c'est etre relatif.

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

Discussions similaires

  1. Multiplication float int
    Par skywaltitou dans le forum MFC
    Réponses: 2
    Dernier message: 29/03/2007, 13h08
  2. Réponses: 3
    Dernier message: 27/08/2006, 14h25
  3. de float à int : partie entière automatique ?
    Par stokastik dans le forum C
    Réponses: 16
    Dernier message: 22/08/2006, 16h51
  4. [XSLT]Convertir une chaîne en float, int etc ... avec XSL
    Par wozzz dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 19/05/2006, 10h12
  5. [CSS] float un peu bizarre sous FF.
    Par elraton dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 10/10/2005, 18h59

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