format de nombres

format de nombres - VB/VBA/VBS - Programmation

Marsh Posté le 12-12-2002 à 12:10:08    

bonjour,
 
mon probleme est que j'aimerais convertir un nombre décimal francais en américain : par exemple 1,5 -> 1.5
est ce que le fait de changer les parametres regionaux résolverait le probleme ???
Et comment on fait pour changer les parametres régionaux directement dans vb sans passer par le panneau de configuration

Reply

Marsh Posté le 12-12-2002 à 12:10:08   

Reply

Marsh Posté le 12-12-2002 à 12:53:25    

Ce 1,5 se trouve où ? Dans un fichier, une colonne de tableau affiché, .. ?
 
Quand on écrit dans un fichier, ça passe en , "naturellement" mais quand on fait str$(ValNum!), y a le point (de mémoire).
Sinon, on passe par instr() pour chercher la virgule et la remplacer par le point.

Reply

Marsh Posté le 12-12-2002 à 15:29:30    

en fait je fais afficher des colonnes d'une base oracle dans des champs et lorsque que je veux mettre à jours ces colonnes par un update, c'est là que ca coince parceque oracle ne comprend que le point : 1.5 et non pas 1,5

Reply

Marsh Posté le 12-12-2002 à 15:37:11    

méthode MagicBuzzienne (c'est à dire extrêment crade, mais qui est censée marcher :D)
 

Code :
  1. dim sepDec as string
  2. dim test as float
  3. on error resume next
  4. test = cdbl("1,5" )
  5. if err <> 0 then
  6.    sepDec = "."
  7. else
  8.    sepDec = ","
  9. end if
  10. on error goto 0
  11. Puis deux fonctions :
  12. function Oracle2VB(number as string) as float
  13.    Oracle2VB = cdbl(replace(trim(number), ".", sepDec))
  14. end function
  15. function VB2Oracle(number as float) as string
  16.    VB2Oracle = replace(cstr(number), sepDec, "." ))
  17. end function


 
A priori, ça doit marcher :)


Message édité par MagicBuzz le 12-12-2002 à 15:37:37
Reply

Marsh Posté le 12-12-2002 à 15:39:18    

Faut pas oublier le séparateur de milliers aussi, à priori, VB l'utilise pas, mais on sait jamais :)

Reply

Marsh Posté le 12-12-2002 à 15:39:43    

C'est du VBA (pour Office) ? Appliqué à EXCEL ?
 
Quand j'exporte des données de manips pour reprendre dans softs "scientifiques", si pas de ".", beaucoup ne comprennent pas :o. Faut convertir à l'écriture.
 
A part la méthode QBasic/QuickBasic avec instr() et mid$()  sans doute extrapolable à VB windows, je ne sais pas.
Si c'est une "interface" sous VB pour communiquer avec ORACLE (je connais pas, suis amateur), y aurait moyen de transformer le texte contenant la virgule au vol (sauf si le champ est formaté "numérique" et non texte pur) lors de la saisie ou de l'envoi. En pur VB on peut intercepter les caractères tapés et remplacer , par . "live".
 
Peut-être à côté de la plaque (zi comprends pas tj du premier coup :pt1cable:).

Reply

Marsh Posté le 13-12-2002 à 08:57:22    

Pour info : c du VB et non du VBA
 
J'ai trouvé la fonction en C qui permet de changer le format des nombres : c setlocal(int, char *)
Il doit bien y avoir l'equivalent de cette fonction en VB ???

Reply

Marsh Posté le 13-12-2002 à 10:23:59    

Peut-être ? La fonction C citée, elle permet de changer la localisation du "chaînage" des nombres ??
 
Je viens d'écrire ça sous QBasic, ça doit aller direct en VB (du moins la fonction, pas le début car on écrit en fenêtre DOS).
 
Chne$ = "1,5"
 
CLS
PRINT Chne$  ' donne 1,5
Chne$ = RemplaceVirg(Chne$)
PRINT Chne$  ' donne 1.5
 
FUNCTION RemplaceVirg$ (Chaine$)
   Dim PosVirg%  
 
   ' où est la virgule si y en a une ?
    PosVirg% = INSTR(Chaine$, "," )
    ' si y en a une, la remplace par point
    IF PosVirg% > 0 THEN
      MID$(Chaine$, PosVirg%) = "."
    END IF
    ' retourne la chaîne modifiée ou non
    RemplaceVirg$ = Chaine$
 
END FUNCTION
 
Si on voulait, si PosVirg% était en 1, on pourrait ajouter 0 devant pour faire "plus joli". Juste test à ajouter.

Reply

Marsh Posté le 13-12-2002 à 13:04:26    

le probleme c que je ne veux pas un string en retour mais un nombre

Reply

Marsh Posté le 13-12-2002 à 13:40:38    

Un nombre n'a pas de virgule ou point ! C'est sa représentation CHAINE qui comporte ou non un point ou une virgule selon le format/le pays/les préférences/besoins.
 
Un entier n'a pas de virgule, un float (en C, single en Basic) comporte une partie fractionnaire. -1,234 par ex sera le même en français, allemand, anglais, américain, chinois, turc, arabe, égyptien, romain (? :pt1cable:), ... Il est codé selon certaines conventions (Intel machin) mais tant qu'on ne le transforme pas en chaîne de caractères pour l'afficher, c'est homogène, idem chez tout le monde.
 
Par contre, la contrevaleur numérique d'une chaîne val("1,5" ) et val("1.5" ) ne sont pas les mêmes, car val() risque d'attendre et ne connaître QUE LE POINT. La virgule sert souvent de délimiteur de champs.
A priori val("1,5" ) = 1; et val("1.5" ) = 1,5 (écrit à la française, ou 1.5 pour les anglosaxons, un et demi en fait)


Message édité par Carbon_14 le 13-12-2002 à 14:12:02
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed