2011-02-01 17 views
16

Ho alcuni valori float che voglio convertire in una stringa, voglio mantenere la formattazione uguale durante la conversione, cioè 999.0000 (float) -> 999.0000 (stringa). Il mio problema è quando i valori contengono un numero arbitrario di zeri dopo il punto decimale, come nell'esempio precedente, essi vengono eliminati durante la conversione in una stringa, quindi il risultato a cui finisco effettivamente è 999.Specificatore Float to String

Ho cercato agli specificatori di formato per il metodo toString() su MSDN, lo specificatore RoundTrip ('R') sembra che produrrà quello che voglio, ma è supportato solo per variabili Single, Double e BigInt. C'è un identificatore di formato come questo per variabili float ?? O sarebbe più semplice convertire i valori in duplicati?

AGGIORNAMENTO: Solo per chiarezza, il motivo per cui voglio mantenere gli zeri finali è perché sto facendo un confronto di cifre decimali, cioè sto confrontando il numero di cifre dopo la cifra decimale tra due valori. Ad esempio, 1.00 e 1.00000 hanno un numero diverso di cifre dopo il punto decimale. So che è una strana richiesta, è per lavoro e il requisito sta venendo dall'alto.

UPDATE 2-3-11:

Stavo pensando a questo troppo duro, sto leggendo i numeri da un file txt e quindi l'analisi come galleggianti, ho intenzione di modificare il programma per controllare se i valori delle stringhe sono decimali o numeri interi. Scusa per aver sprecato il tuo tempo, anche se questo è stato molto perspicace.

+0

quante cifre dopo la virgola?se si desidera mantenere tale dinamica, supponendo che il valore sia corretto, utilizzare .ToString ("G") –

+0

Le cifre variano, per semplificare, direi che l'intervallo di cifre dopo il punto decimale potrebbe essere ovunque tra 1 e 5. – kingrichard2005

+0

.ToString ("G") è ottimale per intervallo variabile –

risposta

24

In primo luogo, come Etienne says, float in C# èSingle. È solo la parola chiave C# per quel tipo di dati.

Così si può sicuramente fare questo:

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

In secondo luogo, lei ha fatto riferimento un paio di volte a "formato" del numero; i numeri non hanno formati, hanno solo valori . Le stringhe hanno formati. Il che mi fa meravigliare: cos'è questa cosa che ha un formato ma non è una stringa? La cosa più vicina che posso pensare sarebbe decimal, che fa mantiene la sua precisione; tuttavia, chiamare semplicemente decimal.ToString dovrebbe avere l'effetto desiderato in quel caso.

Come includere un codice di esempio in modo che possiamo vedere esattamente cosa stai facendo e perché non sta ottenendo quello che vuoi?

+2

Nota rapida: nei campi scientifici, è comune distinguere "1.01e5" e "1.0100e5", poiché il numero di zeri finali contribuisce al numero di cifre significative, che esprime la precisione di una misurazione. –

4

In C#, float è un alias per System.Single (un po 'come int è un alias per System.Int32).

+6

Haha, "un po 'come" -nice uno;) –

38

Utilizzare ToString() con questo formato:

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

mettere tanto zero come necessario alla fine del formato.

+0

Ciao Aliostad, il problema con questo, voglio che la stringa sia formattata esattamente come il numero è formattato. Per il tuo secondo esempio, vorrei che fosse "12345.0" come stringa, non "12345.0000". – kingrichard2005

+0

@ kingrichard2005- quali informazioni indicano se il float è 12345.0 o 12345.0000? Sarebbero equivalenti come galleggianti. –

+0

Sto leggendo questi file da un file txt. Forse un'opzione migliore sarebbe determinare se il numero letto come stringa è un numero decimale o meno. – kingrichard2005

13

È possibile passare una stringa di formato al metodo ToString, in questo modo:

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

Se volete vedere più modificatori, dare un'occhiata a MSDN - Standard Numeric Format Strings