2012-06-29 11 views

Antwort

3

Es gibt keine eingebaute Formatierung dafür.

Sie können den Bruchteil der Zahl erhalten und zählen, wie viele Nullen es gibt, bis Sie zwei Ziffern erhalten, und stellen Sie das Format daraus zusammen. Beispiel:

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); 

Ausgang:

1.000053 

Hinweis: Der einzige gegebene Code funktioniert, wenn es tatsächlich ein Bruchteil der Zahl, und nicht für negative Zahlen. Sie müssen Prüfungen hinzufügen, wenn Sie diese Fälle unterstützen müssen.

+0

Ich würde etwas Äquivalent schreiben, nur ohne eine Schleife: '-ceil (log (x% 1, 10))' gibt dir den Index der ersten Ziffer ungleich Null (zB 'log (0.0002) == -3.69..') – phg

+0

Sehr elegant, ich habe heute etwas gelernt. – GrayFox374

3

Meine Lösung die Zahl in eine Zeichenfolge zu konvertieren wäre. Suchen Sie nach dem ".", Zählen Sie dann Nullen, bis Sie eine Ziffer ungleich Null finden, und nehmen Sie dann zwei Ziffern.

Es ist keine elegante Lösung, aber ich denke, es wird Ihnen konsistente Ergebnisse geben.

1

diese Funktion versuchen, die Anzahl der Nachkommastellen mit Parsen eher zu finden als für Nullen suchen (es funktioniert für negative # s als auch):

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; 
} 
Verwandte Themen