Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
846 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  format de nombres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

format de nombres

n°267938
yayoo
Posté le 12-12-2002 à 12:10:08  profilanswer
 

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

mood
Publicité
Posté le 12-12-2002 à 12:10:08  profilanswer
 

n°267989
Carbon_14
Posté le 12-12-2002 à 12:53:25  profilanswer
 

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.

n°268166
yayoo
Posté le 12-12-2002 à 15:29:30  profilanswer
 

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

n°268175
MagicBuzz
Posté le 12-12-2002 à 15:37:11  profilanswer
 

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
n°268178
MagicBuzz
Posté le 12-12-2002 à 15:39:18  profilanswer
 

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

n°268179
Carbon_14
Posté le 12-12-2002 à 15:39:43  profilanswer
 

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:).

n°268815
yayoo
Posté le 13-12-2002 à 08:57:22  profilanswer
 

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 ???

n°268843
Carbon_14
Posté le 13-12-2002 à 10:23:59  profilanswer
 

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.

n°268999
yayoo
Posté le 13-12-2002 à 13:04:26  profilanswer
 

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

n°269012
Carbon_14
Posté le 13-12-2002 à 13:40:38  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  format de nombres

 

Sujets relatifs
Afficher des images format Jpeg-in-tiff via JAIThumbnails a Image grand format
[ASP] Format des dates.....RésoluConnaissez-vous un langage qui gère les grands nombres ?
[MySQL] - Personnaliser le format de la date/heure dans une table?[pascal] classer des nombres
[ C, C++] SOCKET : format des donnees envoyees avec fonction send()[BCB6] Ecrire un fichier au format Access ?
Export au format csv et retour chariot[SQL] Pb avec un format date...
Plus de sujets relatifs à : format de nombres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR