Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nombre au format Ingénieur

5 réponses
Avatar
Christian
Bonjour,

Je travaille sur un projet qui est en VB6. Vu sa taille, il n'a pas encore
été converti en .NET par manque de temps

Mon problème est que j'ai besoin d'afficher en VB (pas dans Excel), des
nombres au format ingénieur (l'exposant est multiple de 3), donc de la forme :

123.0E+0
12.3E+0
123.5E+3
123.5E+6
123.0E-3
123.5E-3
123.5E+6

Je ne sais pas comment paramétrer la fonction Format de VB.
Le "###.0E+0" utilisé dans Excel ne fonctionne pas.
En raison d'un grand nombre de données, je ne peux pas créer une fonction
qui convertirai les données une par une dans le format ingénieur.

Est-ce que quelqu'un aurait une idée ?
Merci beaucoup d'avance.
Chris

5 réponses

Avatar
Jean-marc
Christian wrote:
Bonjour,

Je travaille sur un projet qui est en VB6. Vu sa taille, il n'a pas
encore été converti en .NET par manque de temps

Mon problème est que j'ai besoin d'afficher en VB (pas dans Excel),
des nombres au format ingénieur (l'exposant est multiple de 3), donc
de la forme :

123.0E+0
12.3E+0
123.5E+3
123.5E+6
123.0E-3
123.5E-3
123.5E+6

Je ne sais pas comment paramétrer la fonction Format de VB.
Le "###.0E+0" utilisé dans Excel ne fonctionne pas.



Hello,

tu es sur que ça ne fonctionne pas ?
Car j'ai essayé exactement comem tu l'indiques et ça donne les
résultats attendus:

Debug.Print Format$( N, "###.0E+0")

Tu es sur de tes entrées ?

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Christian
Oui oui je suis sur que ça ne fonctionne pas.
Par exemple Format$(0.001, "###.0E+0") donne 100.0E-5 ce qui est au format
scientifique mais pas au format ingénieur.
Exemple de résultats entre les deux formats :

Valeurs Scientifique Ingénieur
1 1.00E+00 1.0E+0
100 1.00E+02 100.0E+0
10000 1.00E+04 10.0E+3
100000 1.00E+05 100.0E+3
0.1 1.00E-01 100.0E-3
0.001 1.00E-03 1.0E-3
0.00001 1.00E-05 10.0E-6
0.0000001 1.00E-07 100.0E-9

Je voudrais donc les résultats comme dans la colonne Ingénieur.

Merci pour ton aide.
Christian

"Jean-marc" wrote:

Christian wrote:
> Bonjour,
>
> Je travaille sur un projet qui est en VB6. Vu sa taille, il n'a pas
> encore été converti en .NET par manque de temps
>
> Mon problème est que j'ai besoin d'afficher en VB (pas dans Excel),
> des nombres au format ingénieur (l'exposant est multiple de 3), donc
> de la forme :
>
> 123.0E+0
> 12.3E+0
> 123.5E+3
> 123.5E+6
> 123.0E-3
> 123.5E-3
> 123.5E+6
>
> Je ne sais pas comment paramétrer la fonction Format de VB.
> Le "###.0E+0" utilisé dans Excel ne fonctionne pas.

Hello,

tu es sur que ça ne fonctionne pas ?
Car j'ai essayé exactement comem tu l'indiques et ça donne les
résultats attendus:

Debug.Print Format$( N, "###.0E+0")

Tu es sur de tes entrées ?

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;







Avatar
Vincent Guichard
Bonjour,

En fait le format "###.0E+0" ne fonctionne que si le premier chiffre
significatif est aligné sur une puissance de 10^(3xn-1). (je ne suis pas
sur qu'on puisse dire comme ça :) )

enfin pour expliciter:
Format$(0.123, "###.0E+0") va donner 123.0E-3
(Ok - premier chiffre significatif aligné sur 10-1 = 10^(3x0-1))
Format$(0.0123, "###.0E+0") va donner 123.0E-4
(Pas Ok - premier chiffre significatif aligné sur 10-2 = 10^(3x0-2 ))
Format$(123000, "###.0E+0") va donner 123.0E+3
(Ok - premier chiffre significatif aligné sur 105 = 10^(3x2-1))
Format$(12300, "###.0E+0") va donner 123.0E+2
(Pas Ok - premier chiffre significatif aligné sur 104 = 10^(3x2-2) )

Il n'existe pas à ma connaissance de moyen de réaliser une nota tion
d'ingénieur directement en VB, il va falloir que tu implémentes toi-même
une fonction pour faire cela.

Vincent Guichard

Christian a écrit :
Oui oui je suis sur que ça ne fonctionne pas.
Par exemple Format$(0.001, "###.0E+0") donne 100.0E-5 ce qui est au for mat
scientifique mais pas au format ingénieur.
Exemple de résultats entre les deux formats :

Valeurs Scientifique Ingénieur
1 1.00E+00 1.0E+0
100 1.00E+02 100.0E+0
10000 1.00E+04 10.0E+3
100000 1.00E+05 100.0E+3
0.1 1.00E-01 100.0E-3
0.001 1.00E-03 1.0E-3
0.00001 1.00E-05 10.0E-6
0.0000001 1.00E-07 100.0E-9

Je voudrais donc les résultats comme dans la colonne Ingénieu r.

Merci pour ton aide.
Christian

"Jean-marc" wrote:

Christian wrote:
Bonjour,

Je travaille sur un projet qui est en VB6. Vu sa taille, il n'a pas
encore été converti en .NET par manque de temps

Mon problème est que j'ai besoin d'afficher en VB (pas dans Exce l),
des nombres au format ingénieur (l'exposant est multiple de 3), donc
de la forme :

123.0E+0
12.3E+0
123.5E+3
123.5E+6
123.0E-3
123.5E-3
123.5E+6

Je ne sais pas comment paramétrer la fonction Format de VB.
Le "###.0E+0" utilisé dans Excel ne fonctionne pas.


Hello,

tu es sur que ça ne fonctionne pas ?
Car j'ai essayé exactement comem tu l'indiques et ça donne l es
résultats attendus:

Debug.Print Format$( N, "###.0E+0")

Tu es sur de tes entrées ?

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;









Avatar
Christian
Bonjour,

J'ai la solution à mon problème qui m'a été donnée par un MVP du forum US.

Je vous mets le code ci-dessous au cas où quelqu'un en aurait besoin ça peut
être utile.

Pour info, le paramètre DecimalPlaces permet de déterminer le nombre de
chiffres après la virgule.

Function FormatEngineering(Number As Variant, Optional DecimalPlaces As Long
= 1) As String
Dim Exponent As Long
Dim Parts() As String
Parts = Split(Format(Number, "0.0#############E+0"), "E")
Exponent = 3 * Int(Parts(1) / 3)
FormatEngineering = Format(Parts(0) * 10 ^ (Parts(1) - Exponent), _
"0." & String(DecimalPlaces, "0")) & _
"E" & Format(Exponent, "+0;-0")
End Function

Christian

"Vincent Guichard" wrote:

Bonjour,

En fait le format "###.0E+0" ne fonctionne que si le premier chiffre
significatif est aligné sur une puissance de 10^(3xn-1). (je ne suis pas
sur qu'on puisse dire comme ça :) )

enfin pour expliciter:
Format$(0.123, "###.0E+0") va donner 123.0E-3
(Ok - premier chiffre significatif aligné sur 10-1 = 10^(3x0-1))
Format$(0.0123, "###.0E+0") va donner 123.0E-4
(Pas Ok - premier chiffre significatif aligné sur 10-2 = 10^(3x0-2))
Format$(123000, "###.0E+0") va donner 123.0E+3
(Ok - premier chiffre significatif aligné sur 105 = 10^(3x2-1))
Format$(12300, "###.0E+0") va donner 123.0E+2
(Pas Ok - premier chiffre significatif aligné sur 104 = 10^(3x2-2))

Il n'existe pas à ma connaissance de moyen de réaliser une notation
d'ingénieur directement en VB, il va falloir que tu implémentes toi-même
une fonction pour faire cela.

Vincent Guichard

Christian a écrit :
> Oui oui je suis sur que ça ne fonctionne pas.
> Par exemple Format$(0.001, "###.0E+0") donne 100.0E-5 ce qui est au format
> scientifique mais pas au format ingénieur.
> Exemple de résultats entre les deux formats :
>
> Valeurs Scientifique Ingénieur
> 1 1.00E+00 1.0E+0
> 100 1.00E+02 100.0E+0
> 10000 1.00E+04 10.0E+3
> 100000 1.00E+05 100.0E+3
> 0.1 1.00E-01 100.0E-3
> 0.001 1.00E-03 1.0E-3
> 0.00001 1.00E-05 10.0E-6
> 0.0000001 1.00E-07 100.0E-9
>
> Je voudrais donc les résultats comme dans la colonne Ingénieur.
>
> Merci pour ton aide.
> Christian
>
> "Jean-marc" wrote:
>
>> Christian wrote:
>>> Bonjour,
>>>
>>> Je travaille sur un projet qui est en VB6. Vu sa taille, il n'a pas
>>> encore été converti en .NET par manque de temps
>>>
>>> Mon problème est que j'ai besoin d'afficher en VB (pas dans Excel),
>>> des nombres au format ingénieur (l'exposant est multiple de 3), donc
>>> de la forme :
>>>
>>> 123.0E+0
>>> 12.3E+0
>>> 123.5E+3
>>> 123.5E+6
>>> 123.0E-3
>>> 123.5E-3
>>> 123.5E+6
>>>
>>> Je ne sais pas comment paramétrer la fonction Format de VB.
>>> Le "###.0E+0" utilisé dans Excel ne fonctionne pas.
>> Hello,
>>
>> tu es sur que ça ne fonctionne pas ?
>> Car j'ai essayé exactement comem tu l'indiques et ça donne les
>> résultats attendus:
>>
>> Debug.Print Format$( N, "###.0E+0")
>>
>> Tu es sur de tes entrées ?
>>
>> Cordialement,
>>
>> --
>> Jean-marc Noury (jean_marc_n2)
>> Microsoft MVP - Visual Basic
>> FAQ VB: http://faq.vb.free.fr/
>> mailto: remove '_no_spam_' ;
>>
>>
>>
>>
>>




Avatar
Jean-marc
Christian wrote:
Bonjour,

J'ai la solution à mon problème qui m'a été donnée par un MVP du
forum US.

Je vous mets le code ci-dessous au cas où quelqu'un en aurait besoin
ça peut être utile.

Pour info, le paramètre DecimalPlaces permet de déterminer le nombre
de chiffres après la virgule.

Function FormatEngineering(Number As Variant, Optional DecimalPlaces
As Long = 1) As String
Dim Exponent As Long
Dim Parts() As String
Parts = Split(Format(Number, "0.0#############E+0"), "E")
Exponent = 3 * Int(Parts(1) / 3)
FormatEngineering = Format(Parts(0) * 10 ^ (Parts(1) - Exponent), _
"0." & String(DecimalPlaces, "0")) & _
"E" & Format(Exponent, "+0;-0")
End Function



Joli.

Et merci pur le retour d'info :-)

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;