2010-09-21 4 views
12

En C#, est-il possible d'exécuter ToString sur un flottant et d'obtenir la valeur sans utiliser les exponentielles?Comment obtenir la valeur des flottants sans inclure la notation exponentielle

Par exemple, tenez compte des éléments suivants:

float dummy; 

dummy = 0.000006F; 

Console.WriteLine(dummy.ToString()); 

Cela donne la sortie

6E-06 

Cependant, ce que j'est

0.000006 

Le plus approchante utilisait la "F" qualificateur, mais je dois alors spécifier le nombre de décimales sinon la valeur est arrondie.

Y a-t-il réellement une façon de le faire automatiquement ou dois-je faire une charge de logique géniale pour soit réduire les zéros ou calculer le nombre de décimales requises.

Merci;
Moss Richard

Répondre

16

Essayez cette

Console.WriteLine(dummy.ToString("F")); 

Vous pouvez également spécifier le nombre de décimales. Par exemple F5, F3, etc.

Vous pouvez également vérifier spécificateur de format personnalisé

Console.WriteLine(dummy.ToString("0.#########")); 
+0

Oui, comme mentionné, j'ai déjà essayé cela. Cependant, je dois spécifier le nombre de décimales que je ne connaîtrai pas nécessairement (à moins qu'il y ait quelque chose d'autre qui me manque;)) - Je suis un peu surpris de ne pas pouvoir le faire sauf avec la notation E que mes utilisateurs ne veulent pas. –

+0

Oh, désolé, j'ai dû lire plus attentivement. Donc, si vous voulez afficher le nombre float, vous devez déclarer la précision décimale maximale à afficher. Par ailleurs, le type float ne fournit pas un niveau de précision élevé (~ 10^(- 39)) et vous pouvez simplement choisir le nombre de décimales suffisant. –

+0

J'ai également essayé ceci, à savoir F10, mais l'effet secondaire "était que les zéros ont continué après le 6.J'avais espéré éviter cela, mais si ce n'est que la seule façon de me débarrasser du zéro supplémentaire, je suppose. Il semble juste tellement ... maladroit! –

1
Console.WriteLine(dummy.ToString("N5")); 

où 5 le nombre de décimales

+0

Merci pour la réponse, c'est aussi quelque chose que j'ai déjà essayé et qui subit le même problème que le qualificatif F en ce sens que j'ai besoin de spécifier explicitement une précision que je ne connaîtrai pas. –

2
string dum = string.Format("{0:f99}",dummy).TrimEnd('0'); 
if (dum.EndsWith(",")) dum = dum.Remove(dum.Length - 1); 
2

Sans quelques informations plus d'arrière-plan, il est difficile de dire - mais il semble que vous voulez la sémantique décimale. Alors pourquoi ne pas utiliser le type decimal à la place?

decimal dummy; 
dummy = 0.000006M; 

Le type décimal est plus précis à représenter des nombres décimaux que float ou double, mais il est pas aussi performant. Voir here pour plus d'informations.

0
float dummy = 0.000006F; 
Console.WriteLine(dummy.ToString("0." + new string('#', 60))); 

Si vous allez faire cela beaucoup alors il est logique de stocker la chaîne de format dans un endroit champ/propriété static et réutiliser, plutôt que de construire une nouvelle string chaque fois:

private static readonly string _allFloatDigits = "0." + new string('#', 60); 

// ... 

float dummy = 0.000006F; 
Console.WriteLine(dummy.ToString(_allFloatDigits)); 
Questions connexes