web-dev-qa-db-fra.com

Spécificateur de format Float to String

J'ai des valeurs flottantes que je veux convertir en chaîne, je veux garder la même mise en forme lors de la conversion, c'est-à-dire 999.0000 (flottant) -> 999.0000 (chaîne). Mon problème est que lorsque les valeurs contiennent un nombre arbitraire de zéros après la virgule décimale, comme dans l'exemple précédent, elles sont supprimées lors de la conversion en chaîne, donc le résultat final est 999.

J'ai regardé les spécificateurs de format pour la méthode toString() sur MSDN , le spécificateur RoundTrip ('R') semble produire ce que Je veux, mais il n'est pris en charge que pour les variables Single, Double et BigInt. Existe-t-il un spécificateur de format comme celui-ci pour les variables flottantes ?? Ou serait-il plus facile de simplement convertir les valeurs en doubles?

MISE À JOUR: Juste pour plus de clarté, la raison pour laquelle je veux conserver les zéros de fin est parce que je fais une comparaison des décimales, c'est-à-dire que je compare le nombre de chiffres après la décimale entre deux valeurs. Ainsi, par exemple, 1,00 et 1,00000 ont un nombre différent de chiffres après la virgule décimale. Je sais que c'est une demande étrange, c'est pour le travail et l'exigence vient d'en haut.

MISE À JOUR 2-3-11:

J'y pensais trop dur, je lis les nombres d'un fichier txt et puis les analyse comme des flottants, je vais modifier le programme pour vérifier si les valeurs de chaîne sont des décimales ou des nombres entiers. Désolé d'avoir perdu votre temps, bien que ce soit très perspicace.

21
kingrichard2005

Tout d'abord, comme Etienne dit , float en C # est Single. Il s'agit simplement du mot clé C # pour ce type de données.

Vous pouvez donc certainement le faire:

float f = 13.5f;
string s = f.ToString("R");

Deuxièmement, vous avez mentionné à quelques reprises le "format" du numéro; les nombres n'ont pas de formats, ils ont seulement valeurs. Les chaînes ont des formats. Ce qui me fait me demander: quelle est cette chose que vous avez qui a un format mais qui n'est pas une chaîne? La chose la plus proche à laquelle je peux penser serait decimal, qui le fait maintenir sa propre précision; cependant, appeler simplement decimal.ToString devrait avoir l'effet souhaité dans ce cas.

Que diriez-vous d'inclure un exemple de code afin que nous puissions voir exactement ce que vous faites et pourquoi il n'atteint pas ce que vous voulez?

27
Dan Tao

Utilisez ToString() avec ce format:

12345.678901.ToString("0.0000"); // outputs 12345.6789
12345.0.ToString("0.0000"); // outputs 12345.0000

Mettez autant de zéro que nécessaire à la fin du format.

52
Aliostad

Vous pouvez passer une chaîne de format à la méthode ToString, comme ceci:

ToString("N4"); // 4 decimal points Number

Si vous voulez voir plus de modificateurs, jetez un œil à MSDN - Chaînes de format numérique standard

14
sprite

En C #, float est un alias pour System.Single (un peu comme intest un alias pour System.Int32).

4
Etienne de Martel