Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Virgule ou point? [ Archives Visual Basic / Texte ] (sbaguz)

vendredi 5 novembre 2004 à 14:51:04 | Virgule ou point?

sbaguz

Bonjour, je vais commencer un simple logiciel de calcul, mais j'ai un problème à résoudre auparavant, donc il me faut de l'aide. Ce que je voudrais savoir est: y a-t-il une façon (quelques lignes) de faire reconnaître automatiquement au logiciel si sur le PC où il va fonctionner le séparateur décimal est la virgule ou le point et donc éviter toute erreur de calcul?

Merci.

vendredi 5 novembre 2004 à 15:07:05 | Re : Virgule ou point?
vendredi 5 novembre 2004 à 15:49:13 | Re : Virgule ou point?

chris81

salut,
ya qd meme bcp plus court

TonChiffre = Replace(Tonchiffre,".",",")

cela veut dire que meme si TonChiffre est 10.5 ou 10,5 tu aura apres le replace 10,5 donc plus d'erreur dans les calculs

http://www.tarnweb.com
http://www.correzeweb.com
http://www.localetv.com

vendredi 5 novembre 2004 à 17:31:23 | Re : Virgule ou point?

sbaguz

Merci à tous les deux je vais faire quelques essais? Ce que Gobillot propose est plus ou moins ce que je pensais : La façon d?avoir les informations sur les defaults du système? mais a ce moment là c?est un petit peu compliqué pour moi de bien comprendre ce gros ensemble de lignes cité? je vais l?étudier. Ce que chris81 propose est très simple et donc très intéressant, mais je ne pense pas qu?il s?agit d?une véritable solution, donc je te fais cette objection : tu me dis que TonChiffre = Replace(Tonchiffre,".",",") change par exemple 10.5 en 10,5 et donc j?aurais 10,5 en tous cas? ça va bien si mon PC a la virgule comme default, mais si je dois faire fonctionner le logiciel sur un PC quelconque, dont je ne connais pas le default ? Je vous demande s?il est possible d?unir vos idées, c?est-à-dire quelques lignes qui gagnent le default du système et après appliquer le Replace : Quelles sont ces lignes qui me donne cette information (probablement elles sont déjà dans la page conseillée par Gobillot)? Pourriez vous les commenter un petit peu? je suis débutant.

Merci encore pour la patience.

vendredi 5 novembre 2004 à 19:19:51 | Re : Virgule ou point?

chris81

et ben avec le replace que ton ordi est la virgule pas defaut ou le point tu aura 10,2
http://www.tarnweb.com
http://www.correzeweb.com
http://www.localetv.com

vendredi 5 novembre 2004 à 19:45:34 | Re : Virgule ou point?

Gobillot



Option Explicit

Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long

Private Const LOCALE_SDECIMAL = &HE ' Symbole décimal
Private Const LOCALE_STHOUSAND = &HF ' Séparateur des milliers

Dim Separateur As String

Private Sub Form_Load()
Dim Lettre As String
Dim Chiffre As Single

Call GetUserLocaleInfo(Separateur)
' si pas trouvé --> arrêt programme ?
If Separateur = " " Then
MsgBox "Erreur", vbExclamation
End
End If

'1er cas
Lettre = "123.456"
Chiffre = Replace(Lettre, ".", Separateur)
MsgBox Chiffre
'2eme cas
Lettre = "123,456"
Chiffre = Replace(Lettre, ".", Separateur)
MsgBox Chiffre

End Sub

Private Sub GetUserLocaleInfo(Symbole As String)
Dim sBuffer As String
Dim nBufferLen As Long
Dim LCID As Long
LCID = GetSystemDefaultLCID
nBufferLen = 255
sBuffer = String$(nBufferLen, vbNullChar)
nBufferLen = GetLocaleInfo(LCID, LOCALE_SDECIMAL, sBuffer, nBufferLen)
If nBufferLen > 0 Then
Symbole = Left$(sBuffer, nBufferLen - 1)
Else
Symbole = " "
End If
End Sub



vendredi 5 novembre 2004 à 20:38:14 | Re : Virgule ou point?

CanisLupus

Membre Club Administrateur CodeS-SourceS
Salut, pourquoi faire si compliqué ?

Je pense que le prob se pose uniquement pour des saisies ou des conversions de variables texte en numérique. Dans ce cas, une méthode simple :

If IsNumeric("0.1") then
' Le séparateur est un point
TaVariable = replace(TaVariable,",",".")
else
' Le séparateur est une virgule
TaVariable = replace(TaVariable,".",",")
End If

voire même pour une saisie, dans le keypress d'une textbox :

If IsNumeric("0.1") then
' Le séparateur est un point
if keyascii = 44 then keyascii = 46
else
' Le séparateur est une virgule
if keyascii = 46 then keyascii = 44
End If

Bonne prog

Cordialement, CanisLupus

mardi 9 novembre 2004 à 11:31:11 | Re : Virgule ou point?

sbaguz

Je suis désolé, mais vos idées ne semblent pas fonctionner. En détail :

- Pour chris81 : Le but n?est pas de forcer le donné à être comme nous le voulons, mais comme chaque PC le veut. Tu dis « même si ton chiffre est 10.5 ou 10,5 tu auras après le replace 10,5 donc plus d'erreur dans les calcules», vrai si le logiciel va fonctionner sur un PC qui considère la virgule comme séparateur décimal, faux s?il va fonctionner sur un PC qui utilise le point.
- Pour CanisLupus : Ce que tu propose est fascinant, mais soit que tu considères « 0.1 », soit que tu considères « 0,1 », IsNumeric donne toujours la valeur Vraie (peut-être parce que l?autre probablement est reconnu comme séparateur des milliers).
- Pour Gobillot : Même si ton code est plutôt compliqué pour moi, il semblerait parcourir la route la meilleure : lire les defaults du PC. Mais si je l?utilise, il me dit que mon séparateur décimal est le point, mais au contraire il s?agit de la virgule? Est-ce que quelqu?un en comprend la raison ?

Merci pour votre intérêt.


mardi 9 novembre 2004 à 12:13:55 | Re : Virgule ou point?

sbaguz

Réponse acceptée !
Gobillot a enfin trouvé la solution! Elle est très simple et elle fonctionne parfaitement, voilà :

Dim Separateur As String
Dim Lettre As String
Dim Chiffre As Single

' en VB on a toujours le point quand c'est du numérique
Chiffre = 1.1
' en String ça dépend du système
Lettre = Chiffre
Separateur = Mid$(Chiffre, 2, 1)
MsgBox Separateur

Merci.


mardi 9 novembre 2004 à 15:31:51 | Re : Virgule ou point?

Gobillot

quelques exemples:

Dim a As String
Dim x As Single

If IsNumeric(a) Then
MsgBox "oui"
x = a: MsgBox "x= " & x
Else
MsgBox "non"
End If
MsgBox "val= " & Val(a)

résultats:

- si le signe décimal est la virgule
- et le séparateur des milliers est l'espace
a = "1 234,567" --> oui val = 1234 x=1234,567
a = "1 234.567" --> non val = 1234,567
a = "1.234,567" --> non val = 1,234
a = "1,234.567" --> non val = 1

- si le signe décimal est la virgule
- et le séparateur des milliers est le point
a = "1 234,567" --> non val = 1234
a = "1 234.567" --> non val = 1234,567
a = "1.234,567" --> oui val = 1,234 x=1234,567
a = "1,234.567" --> oui val = 1 x=1,234567

- si le signe décimal est le point
- et le séparateur des milliers est la virgule
a = "1 234,567" --> non val = 1234
a = "1 234.567" --> non val = 1234.567
a = "1.234,567" --> oui val = 1.234 x=1.234567
a = "1,234.567" --> oui val = 1 x=1234.567

conclusions:
-Val(a) donne toujours la même valeur, ne prends en compte que le point et l'espace, mais c'est pas forcément le bon résultat.
-il peut avoir confusion avec le signe décimal et le séparateur des milliers.


1 2

Cette discussion est classé dans : logiciel, virgule, calcul


Répondre à ce message

Sujets en rapport avec ce message

bleme de calcul de chrigffre apre sla virgule [ par Laulaut ] j'ai un gros probleme de calcul si quelqu'un peut m'aide urgence ce serais coolvoila j'ai 3 boite de text et je fais un chiffre dans la premier et un Calcul de chiffres à virgule [ par WareG ] Je doit calculer des sommes à virgule, mais le probleme est le suivant, lorsque je fais la somme par le code suivant j'ai un nombre à virgule beaucoup calcul a virgule [ par WareG ] J'ai bien reç votre code pour le calcul de chiffre à virguleDim Var1, Var2 As SingleVar1 = Text1.TextVar2 = Text2.TextText2.Text = (Int((Var1 + Var2) access 97 petit logiciel de calcul [ par yessongs ] bonjour je suis neophyteje souhaiterais a partir d un formulaire ouvrir un petit logiciel de calcul .en cliquant sur un bouton j ouvre une fenetre de erreur de calcul dans le logiciel: compte est bon [ par ocx ] salut tous le mondej'ai trouvé une erreur de calcul importante dans le logiciel:compte est bonque j'ai telechargé à vbfrancevoici la demonstrationle c Probleme avec virgule dans calcul [ par foliop ] Salut :)voila je fais une multiplication qui saffiche ensuite dans un captio ndonc ca fait :Label.caption = Label1.Caption * 1.5jusque la cest coolseu Remplacement en direct du . par , [ par gbawar ] Bonjour, Je suis entrain de faire un programme de calcul, mais j'ai un léger probléme pour un certain types d'entré.Je veux rentrer un chiffre ou un n Calcul avec virgule [ par Sinsitrus ] Bonjour a tous et bonne année 2008J'ai besoin d'aide svp. J'ai besoin de faire un calcul dans un textbox mais qui prendras en compte les virgules, com Calcul dans un textbox [ par Sinsitrus ] Salut !Je voudrais pouvoir convertir le contenue du textbox T_MontantF avec des chiffres a virgule.Si je met dans le T_MontantF </ surveiller la fermeture d'une application [ par biker45 ] Bonjour, Mon programme lance un petit logiciel de retouche photo (nommé ImageJ). J'ai pu programmer ce petit logiciel pour qu'il effectue automatiquem


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,014 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.