2012-06-29 4 views
5

Come posso visualizzare il numero con solo 2 decimali = zero?Come visualizzare solo i primi 2 decimali non equivale a 0

Esempio:

Per 0,00,045578 millions voglio 0,00045 e per 1,0000,533535 millions voglio 1,000053

+0

caso in cui il primo essere 0,00,046 mila, a causa degli arrotondamenti? –

+0

Quindi se ottieni 45.2500001342 vuoi che sia 45.25 corretto? – craig1231

+0

Come stringa o ancora decimale? – Jorge

risposta

3

Non esiste una formattazione incorporata per questo.

È possibile ottenere la parte frazione del numero e contare quanti zeri ci sono fino a quando non si ottengono due cifre e unire il formato da quello. Esempio:

double number = 1.0000533535; 

double i = Math.Floor(number); 
double f = number % 1.0; 

int cnt = -2; 
while (f < 10) { 
    f *= 10; 
    cnt++; 
} 

Console.WriteLine("{0}.{1}{2:00}", i, new String('0', cnt), f); 

uscita:

1.000053 

Nota: Il dato codice funziona solo se effettivamente c'è una parte frazionaria del numero, e non per i numeri negativi. È necessario aggiungere assegni per questo se è necessario supportare tali casi.

+0

Stavo per scrivere qualcosa di equivalente, solo senza un ciclo: '-ceil (log (x% 1, 10))' ti dà l'indice della prima cifra diversa da zero direttamente (es. 'log (0.0002) == -3.69..') – phg

+0

Molto elegante, ho imparato qualcosa oggi. – GrayFox374

3

La mia soluzione sarebbe quella di convertire il numero in una stringa. Cerca ".", Quindi conta gli zeri finché non trovi una cifra diversa da zero, quindi prendi due cifre.

Non è una soluzione elegante, ma penso che vi darà risultati coerenti.

1

Prova questa funzione, utilizzando analisi per trovare il # di cifre decimali, piuttosto che alla ricerca di zeri (funziona per #s negative pure):

private static string GetTwoFractionalDigitString(double input) 
{ 
    // Parse exponential-notation string to find exponent (e.g. 1.2E-004) 
    double absValue = Math.Abs(input); 
    double fraction = (absValue - Math.Floor(absValue)); 
    string s1 = fraction.ToString("E1"); 
    // parse exponent peice (starting at 6th character) 
    int exponent = int.Parse(s1.Substring(5)) + 1; 

    string s = input.ToString("F" + exponent.ToString()); 

    return s; 
} 
Problemi correlati