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

String.Format

8 réponses
Avatar
Annie L.
Avec "String.Format" on devrait par exemple en international rempacer le
point par une virgule ou l'inverse selon le panneau de configuration de
Windows.

MonChampTexte.Text = String.Format("{0:#.##}", MonChampTexte.Text)

Si je travaille avec windows anglais, il prends les points comme séparateur
de décimal. Ex.: 234.54

Si j'écris 234,56 dans mon champ texte (MonChampTexte.Text), il devrait
afficher "234.56" mais au lieu, il m'écrit "23456.00"
Pourtant, on dit que le point dans ("{0:#.##}", est remplacer par le
séparateur de décimal du panneau de config de Windows!

Quel est mon erreur! Sûrement dans "String.Format" ??????

Merci de vos réponses!

8 réponses

Avatar
Patrice
Toujours en anglais ? Cela me parait normal. La virgule est le séparateur de
milliers en anglais.
Donc pour 234,56 elle n'est pas à la bonne place et est ignorée ce qui donne
bien 23456. On aurait sans doute la même chose en français avec 234 56 qui
donnerait également 23456.

Attention : il me parait aussi un peu bizarre d'appliquer le format sur du
texte. Ne faudrait il pas le convertir en nombre d'abord ? (et vérification
faite cela ne semble pas marcher chez moi)

---
Patrice


"Annie L." a écrit dans le message de
news:
Avec "String.Format" on devrait par exemple en international rempacer le
point par une virgule ou l'inverse selon le panneau de configuration de
Windows.

MonChampTexte.Text = String.Format("{0:#.##}", MonChampTexte.Text)

Si je travaille avec windows anglais, il prends les points comme
séparateur
de décimal. Ex.: 234.54

Si j'écris 234,56 dans mon champ texte (MonChampTexte.Text), il devrait
afficher "234.56" mais au lieu, il m'écrit "23456.00"
Pourtant, on dit que le point dans ("{0:#.##}", est remplacer par le
séparateur de décimal du panneau de config de Windows!

Quel est mon erreur! Sûrement dans "String.Format" ??????

Merci de vos réponses!


Avatar
Annie L.
Vous dites : (et vérification
faite cela ne semble pas marcher chez moi) ? "String.Format" ???



Merci!

"Patrice" wrote:

Toujours en anglais ? Cela me parait normal. La virgule est le séparateur de
milliers en anglais.
Donc pour 234,56 elle n'est pas à la bonne place et est ignorée ce qui donne
bien 23456. On aurait sans doute la même chose en français avec 234 56 qui
donnerait également 23456.

Attention : il me parait aussi un peu bizarre d'appliquer le format sur du
texte. Ne faudrait il pas le convertir en nombre d'abord ? (et vérification
faite cela ne semble pas marcher chez moi)

---
Patrice


"Annie L." a écrit dans le message de
news:
> Avec "String.Format" on devrait par exemple en international rempacer le
> point par une virgule ou l'inverse selon le panneau de configuration de
> Windows.
>
> MonChampTexte.Text = String.Format("{0:#.##}", MonChampTexte.Text)
>
> Si je travaille avec windows anglais, il prends les points comme
> séparateur
> de décimal. Ex.: 234.54
>
> Si j'écris 234,56 dans mon champ texte (MonChampTexte.Text), il devrait
> afficher "234.56" mais au lieu, il m'écrit "23456.00"
> Pourtant, on dit que le point dans ("{0:#.##}", est remplacer par le
> séparateur de décimal du panneau de config de Windows!
>
> Quel est mon erreur! Sûrement dans "String.Format" ??????
>
> Merci de vos réponses!





Avatar
Gilles TOURREAU
Le Mon, 29 Oct 2007 19:22:00 +0100, Annie L.
a écrit:

Avec "String.Format" on devrait par exemple en international rempacer le
point par une virgule ou l'inverse selon le panneau de configuration de
Windows.

MonChampTexte.Text = String.Format("{0:#.##}", MonChampTexte.Text)

Si je travaille avec windows anglais, il prends les points comme
séparateur
de décimal. Ex.: 234.54

Si j'écris 234,56 dans mon champ texte (MonChampTexte.Text), il devrait
afficher "234.56" mais au lieu, il m'écrit "23456.00"
Pourtant, on dit que le point dans ("{0:#.##}", est remplacer par le
séparateur de décimal du panneau de config de Windows!

Quel est mon erreur! Sûrement dans "String.Format" ??????

Merci de vos réponses!



C'est normal...

"{0:#.##}" n'a de sens uniquement si le 2ème paramètre est type float,
decimal ou double...

MonChampTexte.Text est de type string, donc .NET se contente de remplacer
{0:...........} par la valeur du 2ème paramètre.

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Annie L.
GT = MonChampTexte.Text est de type string, donc .NET se contente de
remplacer
{0:...........} par la valeur du 2ème paramètre.



Le 2e paramètre est de type "Double" et cela ne change rien!

MonChampTexte.Text = String.Format("{0:#.##}", CType(MonChampTexte.Text,
Double))

Merci quand même!

"Gilles TOURREAU" wrote:

Le Mon, 29 Oct 2007 19:22:00 +0100, Annie L.
a écrit:

> Avec "String.Format" on devrait par exemple en international rempacer le
> point par une virgule ou l'inverse selon le panneau de configuration de
> Windows.
>
> MonChampTexte.Text = String.Format("{0:#.##}", MonChampTexte.Text)
>
> Si je travaille avec windows anglais, il prends les points comme
> séparateur
> de décimal. Ex.: 234.54
>
> Si j'écris 234,56 dans mon champ texte (MonChampTexte.Text), il devrait
> afficher "234.56" mais au lieu, il m'écrit "23456.00"
> Pourtant, on dit que le point dans ("{0:#.##}", est remplacer par le
> séparateur de décimal du panneau de config de Windows!
>
> Quel est mon erreur! Sûrement dans "String.Format" ??????
>
> Merci de vos réponses!

C'est normal...

"{0:#.##}" n'a de sens uniquement si le 2ème paramètre est type float,
decimal ou double...

MonChampTexte.Text est de type string, donc .NET se contente de remplacer
{0:...........} par la valeur du 2ème paramètre.

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr



Avatar
Gilles TOURREAU
Le Tue, 30 Oct 2007 18:04:00 +0100, Annie L.
a écrit:

GT = MonChampTexte.Text est de type string, donc .NET se contente de
remplacer
{0:...........} par la valeur du 2ème paramètre.



Le 2e paramètre est de type "Double" et cela ne change rien!

MonChampTexte.Text = String.Format("{0:#.##}", CType(MonChampTexte.Text,
Double))

Merci quand même!



Qu'elle séparateur est affiché dans :

System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Annie L.
Qu'elle séparateur est affiché dans :

System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator



Je réponds : la virgule

Je vais vous expliquer plus en détail ce qui se passe = conflit !!

Je travaille sur Windows en anglais Canada, donc j'utilise par défaut, le
point
Les données numériques dans ma base de données MS Access sont avec des points
Lorsque je démarre mon application et que je travaille en français, il
m'affiche des points pour mes valeurs numériques et monétaires mais je
travaille avec des virgules car selon la "culture" qui est français canada!!!
Voilà mon problème!!!

J'ai résolu mon problème. En démarrant mon application, je vérifie la langue
de travail choisit par l'utilisateur et je choisit de travailler avec le
point ou la virgule!
Alors dans le cas-haut mentionné, je force l'utilisation du point! Donc, si
j'appuie sur la virgule, il m'affiche un point pour les décimales.

Cela règle mon problème! Il y a sûrement des façons plus élégantes de
procéder, mais l'important c'est le résultat le plus simplement possible pour
éviter les bogues!

Merci de votre temps!



"Gilles TOURREAU" wrote:

Le Tue, 30 Oct 2007 18:04:00 +0100, Annie L.
a écrit:

> GT = MonChampTexte.Text est de type string, donc .NET se contente de
> remplacer
>> {0:...........} par la valeur du 2ème paramètre.
>
> Le 2e paramètre est de type "Double" et cela ne change rien!
>
> MonChampTexte.Text = String.Format("{0:#.##}", CType(MonChampTexte.Text,
> Double))
>
> Merci quand même!

Qu'elle séparateur est affiché dans :

System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr



Avatar
Gilles TOURREAU
Le Wed, 31 Oct 2007 14:25:02 +0100, Annie L.
a écrit:

Qu'elle séparateur est affiché dans :

System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator



Je réponds : la virgule

Je vais vous expliquer plus en détail ce qui se passe = conflit !!

Je travaille sur Windows en anglais Canada, donc j'utilise par défaut, le
point
Les données numériques dans ma base de données MS Access sont avec des
points
Lorsque je démarre mon application et que je travaille en français, il
m'affiche des points pour mes valeurs numériques et monétaires mais je
travaille avec des virgules car selon la "culture" qui est français
canada!!!
Voilà mon problème!!!

J'ai résolu mon problème. En démarrant mon application, je vérifie la
langue
de travail choisit par l'utilisateur et je choisit de travailler avec le
point ou la virgule!
Alors dans le cas-haut mentionné, je force l'utilisation du point! Donc,
si
j'appuie sur la virgule, il m'affiche un point pour les décimales.

Cela règle mon problème! Il y a sûrement des façons plus élégantes de
procéder, mais l'important c'est le résultat le plus simplement possible
pour
éviter les bogues!

Merci de votre temps!






Il suffit de mettre au début de votre programme :

System.Threading.Thread.CurrentThread.CurrentCulture = ...


soit :

System.Globalization.CultureInfo.GetCultureInfo("fr-CA")

ou

System.Globalization.CultureInfo.GetCultureInfo("en-CA")


Normalement le NumberDecimalSeparator de "fr-CA" est "," et celui de
"en-CA" est "."...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Annie L.
Il suffit de mettre au début de votre programme :
System.Threading.Thread.CurrentThread.CurrentCulture = ...
System.Globalization.CultureInfo.GetCultureInfo("fr-CA")



C'est déjà fait depuis fort longtemps! Et c'est cela qui vient modifier soit
que j'utilise un point ou une virgule dans mon application indépendamment des
configurations de Windows.

Merci !

"Gilles TOURREAU" wrote:

Le Wed, 31 Oct 2007 14:25:02 +0100, Annie L.
a écrit:

> Qu'elle séparateur est affiché dans :
>>
>> System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
>
> Je réponds : la virgule
>
> Je vais vous expliquer plus en détail ce qui se passe = conflit !!
>
> Je travaille sur Windows en anglais Canada, donc j'utilise par défaut, le
> point
> Les données numériques dans ma base de données MS Access sont avec des
> points
> Lorsque je démarre mon application et que je travaille en français, il
> m'affiche des points pour mes valeurs numériques et monétaires mais je
> travaille avec des virgules car selon la "culture" qui est français
> canada!!!
> Voilà mon problème!!!
>
> J'ai résolu mon problème. En démarrant mon application, je vérifie la
> langue
> de travail choisit par l'utilisateur et je choisit de travailler avec le
> point ou la virgule!
> Alors dans le cas-haut mentionné, je force l'utilisation du point! Donc,
> si
> j'appuie sur la virgule, il m'affiche un point pour les décimales.
>
> Cela règle mon problème! Il y a sûrement des façons plus élégantes de
> procéder, mais l'important c'est le résultat le plus simplement possible
> pour
> éviter les bogues!
>
> Merci de votre temps!
>
>
>

Il suffit de mettre au début de votre programme :

System.Threading.Thread.CurrentThread.CurrentCulture = ...


soit :

System.Globalization.CultureInfo.GetCultureInfo("fr-CA")

ou

System.Globalization.CultureInfo.GetCultureInfo("en-CA")


Normalement le NumberDecimalSeparator de "fr-CA" est "," et celui de
"en-CA" est "."...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr