[HELP] Format$(Hex(20025),"0000")

Le
Sam Vimaire
Bonjour.

Help !
Je regardais la cause d'une erreur dans un programme VB quand je tombe
sur ca.

Debug.Print Format$(Hex(20026), "0000")
affiche 4E3A

Mais
Debug.Print Format$(Hex(20025), "0000")
affiche
400000000000000000000000000000000000000

Quel est ce mystère ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sam Vimaire
Le #18177221
Après mûre réflexion, Sam Vimaire a écrit :
Debug.Print Format$(Hex(20025), "0000")
affiche
400000000000000000000000000000000000000



J'ai remplacé par
Left$(Hex(20025) & "0000",4)

Mais quelle est mon erreur ?
Ai-je mal employé Format$ ?
PH
Le #18177511
Sam Vimaire a écrit :
Après mûre réflexion, Sam Vimaire a écrit :
Debug.Print Format$(Hex(20025), "0000")
affiche
400000000000000000000000000000000000000



J'ai remplacé par
Left$(Hex(20025) & "0000",4)

Mais quelle est mon erreur ?
Ai-je mal employé Format$ ?




Hex(N) renvoie une chaine de caractères, Format$ attend un nombre

20026 donne 4E3A qui ne peut être converti en nombre donc renvoie la
chaîne elle-même

20025 donne 4E39 ce qui sous forme de nombre donne un 4 suivi de 39 zéro
et se traduit avec format$ par un 4 suivi de 39 zéros.

Erreur intéressante.
Sam Vimaire
Le #18177661
PH a couché sur son écran :
Hex(N) renvoie une chaine de caractères, Format$ attend un nombre



*Merci* pour ces eclaircissements. Tout est clair, maintenant.

Nonobstant, la documentation indique bien pour entrée de Format : "any
valid expression"

et expression renvoie à
A combination of keywords, operators, variables, and constants that
yields a string, number, or object. An expression can be used to
perform a calculation, manipulate characters, or test data.

Ca reste abscons...
Sam Vimaire
Le #18177651
Sam Vimaire a exposé le 19/12/2008 :
Nonobstant, la documentation indique bien pour entrée de Format : "any valid
expression"



Je retire ce dernier post.
C'est trompeur, mais bien logique.
LE TROLL
Le #18177901
Ah, pas mal, alors l'un est pris pour de l'hexa, et l'autre pour un
exposant, ouais, fallait y penser :o)

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"PH" %23rp9C%
| Sam Vimaire a écrit :
| > Après mûre réflexion, Sam Vimaire a écrit :
| >> Debug.Print Format$(Hex(20025), "0000")
| >> affiche
| >> 400000000000000000000000000000000000000
| >
| > J'ai remplacé par
| > Left$(Hex(20025) & "0000",4)
| >
| > Mais quelle est mon erreur ?
| > Ai-je mal employé Format$ ?
| >
| >
| Hex(N) renvoie une chaine de caractères, Format$ attend un nombre
|
| 20026 donne 4E3A qui ne peut être converti en nombre donc renvoie la
| chaîne elle-même
|
| 20025 donne 4E39 ce qui sous forme de nombre donne un 4 suivi de 39 zéro
| et se traduit avec format$ par un 4 suivi de 39 zéros.
|
| Erreur intéressante.
jean-marc
Le #18178201
"Sam Vimaire" news:494b7784$0$9254$
Sam Vimaire a exposé le 19/12/2008 :
Nonobstant, la documentation indique bien pour entrée de Format : "any
valid expression"





hello,

très intéressant en effet.

Voici une méthode qui marche dans tous les cas :
? Replace(format$(hex(20025), "@@@@")," ", "0")
4E39

? replace(format$(hex(20026), "@@@@")," ", "0")
4E3A

? replace(format$(hex(10), "@@@@")," ", "0")
000A

Le "@" indique un caractère ou un espace, et on remplace
les espaces par des "0".

Il ne reste plus qu'à en faire une petite fonction:

Function SafeFormatHex(byval n As Long) As String

SafeFormatHex = Replace(Format$(Hex(n), "@@@@"), " ", "0")
End Function

Et voila :-)

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
jeanmarcnoury
Le #18178191
On 19 déc, 11:29, Sam Vimaire
Sam Vimaire a exposé le 19/12/2008 :

> Nonobstant, la documentation indique bien pour entrée de Format : "an y valid
> expression"

Je retire ce dernier post.
C'est trompeur, mais bien logique.



hello,

très intéressant en effet.

Voici une méthode qui marche dans tous les cas :
? Replace(format$(hex(20025), "@@@@")," ", "0")
4E39

? replace(format$(hex(20026), "@@@@")," ", "0")
4E3A

? replace(format$(hex(10), "@@@@")," ", "0")
000A

Le "@" indique un caractère ou un espace, et on remplace
les espaces par des "0".

Il ne reste plus qu'à en faire une petite fonction:

Function SafeFormatHex(byval n As Long) As String

SafeFormatHex = Replace(Format$(Hex(n), "@@@@"), " ", "0")
End Function

Et voila :-)

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Sam Vimaire
Le #18178411
Sam Vimaire a exposé le 19/12/2008 :
Après mûre réflexion, Sam Vimaire a écrit :
Debug.Print Format$(Hex(20025), "0000")
affiche
400000000000000000000000000000000000000



J'ai remplacé par
Left$(Hex(20025) & "0000",4)



Oula.. Personne n'a corrigé ! ;o)
(Fin d'année.. neurones en bernes)
C'est
Right$("0000" & HEx(20025),4)
qu'il faut écrire.. si je veux mon resultat sur 4 digits.)
Publicité
Poster une réponse
Anonyme