2010-12-06 14 views
4

J'ai un flottant nullable. Les décimales internes peuvent être séparées par un point ou une virgule, par ex. 1,2 ou 1,2. J'ai besoin de ce flotteur comme une chaîne pour le comparer à un Regex. Si j'utilise la méthode Convert.toString, le flottant avec la virgule est 12 et non 1.2. Comment puis-je convertir un float en String sans perdre la virgule ou le point? J'ai déjà essayé de le convertir avec différentes cultures.Convertir float en chaîne avec virgule et point

Merci pour votre aide

+0

et que devrait 1.200,00 être analysé comme? – SWeko

+0

Pourquoi 1,2 devrait-il être 12? – VVS

+0

le flottant est un pourcentage, donc il ne peut prendre que des valeurs de 0,00 à 100,00 ou de 0,00 à 100,00 – holzleube

Répondre

0

fonction String.Format() avec masque. Mais pouvez-vous convertir vos chaînes en nombres plutôt que vos nombres en chaînes, à des fins de comparaison? Est-ce que ça doit être une comparaison regex?

+0

J'ai besoin d'une regex pour vérifier s'il n'y a que deux décimales internes. le flotteur est lié à une zone de texte et dans cette zone de texte, vous pouvez utiliser des points ou des virgules – holzleube

-1

Essayez:

string s = yourFloat.ToString(); 

En utilisant la culture invariante est recommandée si vous voulez être sûr que votre sortie sera sous la forme correcte, mais je serais surpris s'il y avait une culture qui ne sortie une virgule ou un point.

Je voudrais également suggérer pas en utilisant des expressions régulières pour valider la valeur d'un flottant.

+0

J'ai essayé cela et cela ne fonctionne pas. Que dois-je prendre pour valider un flotteur? – holzleube

+0

@holzleube: Si le code que j'ai posté imprime "12" c'est probablement parce que la valeur du float * est * en fait 12, et non 1.2 comme vous le pensez. Comment valider un flottant dépend du type de validation dont vous avez besoin. –

3

Une solution pour cela peut être le suivant:

float? num = 1.2f; 
string floatAsString = string.Format("{0:f}", num.Value); 

Peut-être que vous devez vérifier si la propriété est HasValuetrue avant d'utiliser la valeur. Pour plus d'exemples: http://alexonasp.net/samples/stringformatting/

0

Etes-vous sûr que la zone de texte permet à la fois "." et "," comme un séparateur décimal (par opposition à un caractère de regroupement, également connu comme un séparateur de milliers)?

Lorsque vous êtes certain que vous avez uniquement des séparateurs décimaux et aucun caractère de regroupement, remplacez "," par "." avant d'utiliser TryParse avec InvariantCulture pour convertir la chaîne en float.
OU utilisez la même culture dans le code que sur le côté client, de sorte que les deux utilisent les mêmes séparateurs décimaux.

Comme d'autres mentionné, un flotteur n'a pas le concept de divers séparateurs décimaux.

0

S'il s'agit d'une application WinForm, il existe une variable statique Application.CurrentCulture.NumberFormat.NumberDecimalSeparator.

En fonction de sa valeur, vous obtenez des résultats différents lors de la conversion ToString(). Essayez de manipuler ce paramètre pour obtenir le résultat nécessaire.

0

Ok J'ai résolu le problème. J'ai fait dans mon xaml un convertisseur qui ne permet que d'entrer des valeurs avec des virgules comme séparateur, donc je n'ai pas besoin de vérifications s'il n'y a que deux décimales internes. Merci pour votre aide