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

Oracle Discussion :

Format de nombre


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Format de nombre
    Bonjour,

    j'ai besoin de votre aide pour un problème qui doit être assez simple à résoudre, mais là je tourne en rond ...
    Dans ma base j'ai un champ définit en FLOAT.
    J'ai des données enregistrées avec des décimales, et sans décimale (ce sont des montants).

    Je dois transférer un fichier ascii, où tous les montants sont représentés sur 13 caractères, dont les deux derniers sont les décimales.

    Comment puis-je faire ?

    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Bah float va bien jusqu'à 13 chiffres avant la virgule non ? Sinon, tu convertis la colonne en NUMBER(15,2)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 64
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lpad(to_char(montant*100),13,'0')
    ne convient pas ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 154
    Points : 98
    Points
    98
    Par défaut
    Ben moi j'aurais tendance à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lpad(to_char(montant,'99999999999.99'),13,'0')
    Mais ça ne va pas marché aussi ..!!
    Pourtant
    to_char('152.43','9999999999.99') donne 152.43 et
    to_char('152','9999999999.99') donne 152.00

    Donc il reste qu'a appliquer le lpad pour rajouter des zéros à gauche.
    lpad(152.43,13,'0') donne 0000000152.43 et
    lpad(152,13,'0') 0000000152.00

    Peut être l'imbrication de lpad() avec to_char() pose un problème:

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Pourquoi s'embeter avec des LPAD et autre alors qu'un bete to_char permet de faire pareil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select to_char(152.00,'00000000000.00')
    from dual
    donne

    00000000152.00

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select to_char(152.43,'00000000000.00')
    from dual
    donnera 00000000152.43

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 154
    Points : 98
    Points
    98
    Par défaut
    Effecivement ta solution est plus simple helyos ...
    Mais je ne sais pas toujours pourquois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select lpad(to_char(151.15,'99999999999.99'),13,'0') from dual;
    donne : 151.
    Moi je m'attendais à : 0000000151.15

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par blids
    Effecivement ta solution est plus simple helyos ...
    Mais je ne sais pas toujours pourquois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select lpad(to_char(151.15,'99999999999.99'),13,'0') from dual;
    donne : 151.
    Moi je m'attendais à : 0000000151.15
    Les formatages de nombre avec TO_CHAR, c'est vicieux !
    TO_CHAR(151.15, '9999.99), ça ne donne pas '151.15', mais ' 151.15' avec deux espaces en tête.
    D'où viennent-ils ? En fouillant un peu dans la doc, ça s'explique :
    - si on utilise une chaîne de formatage avec TO_CHAR, par défaut, le résultat est prédédé d'un espace
    - un 9 (avant la virgule) dans la chaîne de formatage est converti en espace s'il n'y a pas de chiffre dans la même position dans le nombre de départ. Ici, 151.15 ne comporte pas de chiffre des milliers, donc le premier 9 de 9999.99 se transforme en espace.

    Pour éviter cela, il suffit d'ajouter FM en tête de la chaîne de formatage, ce qui aura pour effet d'éliminer les espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select lpad(to_char(151.15,'FM99999999999.99'),13,'0') from dual;
    --> '0000000151.15'

    Et voilà pourquoi votre fille est muette

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 154
    Points : 98
    Points
    98
    Par défaut
    OKeeeeey,
    Je me disais qu'il y a pas de choses à revoir dans les fonctions de conversions... .
    Merci pour la réponse ... je pense shawinnigan peut marquer sa question comme résolut.

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci à tous,

    j'ai réussi à formater mes chiffres, merci.
    Le débat sur le formatage était intéressant, et pour rajouter ma touche finale j'ai pu remarquer que suivant si on utilise le point ou la virgule comme séparateur, la fonction TO_CHAR ne réagit pas de la même façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select to_char(152.00,'00000000000.00') 
    from dual
    donne 00000000152.00

    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select to_char(152.00,'00000000000,00') 
    from dual
    donne 00000000001,52
    Et ça je ne sais pas pourquoi ...

    Merci à tous, et bonne continuation

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    attention tout va dépendre du NLS_LANG que tu utilises car le . et la , non pas forcement la meme signification en fonction du NLS_LANG

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 154
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par helyos
    attention tout va dépendre du NLS_LANG que tu utilises car le . et la , non pas forcement la meme signification en fonction du NLS_LANG
    Comment ça, ils n'ont pas la même signification...!!?

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    En AMERICAN le . est un séparateur décimal alors qu'en FRENCH c'est , le séparateur

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 154
    Points : 98
    Points
    98
    Par défaut
    Yes, ça marche Merci

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

Discussions similaires

  1. [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, 11h40
  2. probleme Format de nombre
    Par Bason_sensei dans le forum C
    Réponses: 6
    Dernier message: 30/11/2005, 11h49
  3. Format des nombres entiers, séparateurs de milliers
    Par zazaraignée dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2005, 02h25
  4. formater un nombre en format "monétaire"
    Par jm6570 dans le forum Access
    Réponses: 2
    Dernier message: 14/09/2005, 11h06
  5. Formater un nombre avec Crystal Reports
    Par Soph70 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 05/07/2005, 20h27

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