2016-07-01 28 views
0

Ich möchte die einfachste Möglichkeit kennen, eine Zahl in eine abgeschnittene und abgerundete Form umzuwandeln.
Ich weiß, viele Möglichkeiten, es manuell zu tun (manuell abschneiden, setzen Sie ein Komma, dann runden die Zahl nach), aber ich denke, es gibt einfachere Möglichkeiten, es zu tun (wahrscheinlich mit Mathematik-Methoden).So kürzen Sie einfach eine Zahl für die Anzeige

Beispiel:
1 234 567 1,2 M
1 567 890 werden sollte 1,6 M

+0

Es gibt keine eingebaute Möglichkeit, Sie müssen es manuell tun. – currarpickt

Antwort

1

So etwas werden sollte:

static string FormatNumber(uint n) 
{ 
    if (n < 1000) 
     return n.ToString(); 
    if (n < 10000) 
     return String.Format("{0:#,.##}K", n - 5); 
    if (n < 100000) 
     return String.Format("{0:#,.#}K", n - 50); 
    if (n < 1000000) 
     return String.Format("{0:#,.}K", n - 500); 
    if (n < 10000000) 
     return String.Format("{0:#,,.##}M", n - 5000); 
    if (n < 100000000) 
     return String.Format("{0:#,,.#}M", n - 50000); 
    if (n < 1000000000) 
     return String.Format("{0:#,,.}M", n - 500000); 
    return String.Format("{0:#,,,.##}B", n - 5000000); 
    } 

geben Sie diese Ausgabe:

1249   1.24K 
12499   12.4K 
124999   124K 
1249999   1.24M 
12499999  12.4M 
124999999  124M 
1249999999  1.24B 

Ich glaube nicht, dass es eingebaute Bibliotheken dafür gibt.

1

Der ganzzahlige Teil des Logarithmus der Basis 10 gibt Ihnen den Exponenten, wie er in der wissenschaftlichen Notation erscheint.

Wenn Sie möchten s signifikante Ziffern, normalisieren durch Division durch zehn auf den Exponenten, rescale von zehn bis s-1 und Runde.

e= floor(log10(x)); // => e = 6 
x= Round(x * pow(10, s - 1 - e)); // => x = 12, x = 16