2010-09-21 12 views
12

In C#, è possibile eseguire ToString su un float e ottenere il valore senza utilizzare esponenziali?Come ottenere il valore float senza includere la notazione esponenziale

Ad esempio, si consideri il seguente:

float dummy; 

dummy = 0.000006F; 

Console.WriteLine(dummy.ToString()); 

Questo dà l'uscita

6E-06 

Tuttavia, quello che è stato è

0.000006 

Il più vicino ho trovato è stato utilizzando il Qualificatore "F", tuttavia devo specificare il numero di cifre decimali altrimenti il ​​valore viene arrotondato.

C'è davvero un modo per farlo automaticamente o devo fare un carico di logica funky per troncare gli zero o calcolare il numero di decimali richiesti.

Grazie;
Richard Moss

risposta

16

Prova questo numero

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

È inoltre possibile specificare di cifre decimali. Per esempio F5, F3, ecc

Inoltre, è possibile controllare formato personalizzato specificatore

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

Sì, come già detto ho già provato questo. Tuttavia, ho bisogno di specificare il numero di cifre decimali che non saprò necessariamente (a meno che non manchi qualcos'altro;)) - Sono un po 'sorpreso dal fatto che non riesco a farlo a meno che con la notazione E che i miei utenti non vogliono –

+0

Oh, scusa, ho dovuto leggere più attentamente. Pertanto, se si desidera visualizzare il numero float, è necessario dichiarare la massima precisione decimale da mostrare. A proposito, il tipo float non fornisce un alto livello di precisione (~ 10^(- 39)) e puoi semplicemente scegliere la quantità sufficiente di cifre decimali –

+0

Ho anche provato questo, cioè F10, ma "l'effetto collaterale" "era che gli zeri continuavano dopo il 6.Avevo sperato di evitarlo, ma se fosse l'unico modo in cui posso eliminare lo zero in più suppongo. Sembra proprio così ... goffo! –

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

dove 5 il suo numero di cifre decimali

+0

Grazie per la risposta, questo è anche qualcosa che ho già provato e subisce lo stesso problema del qualificatore F in cui ho bisogno di specificare esplicitamente una precisione che non saprò. –

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

sanza più informazioni di fondo, è difficile dire - ma suona come si desidera la semantica decimali. Quindi, perché non utilizzare il tipo decimal?

decimal dummy; 
dummy = 0.000006M; 

Il tipo decimale è più preciso a rappresentare numeri decimali di float o double, ma non è così performante. Vedi here per maggiori informazioni.

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

Se farete questo molto allora ha senso per memorizzare la stringa di formato in un campo static/proprietà da qualche parte e ri-usare, piuttosto che la costruzione di una nuova string ogni volta:

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

// ... 

float dummy = 0.000006F; 
Console.WriteLine(dummy.ToString(_allFloatDigits)); 
Problemi correlati