2010-11-19 12 views
2

Ich versucheWie konvertiert man 1234.5678 in 1234.56 in C#?

 double abc = 1234.5678; 
     Console.WriteLine(abc.ToString("N2")); 
     Console.ReadKey(); 

zu verwenden, aber das

1.234,57 

statt

1234.56 

zeitigt Wie kann ich das erreichen?

+3

Sieht aus wie Sie europäische numerische Notation machen. Wie ist Ihr Gebietsschema in Windows eingestellt? – Aren

+0

Ja, es ist europäisch. Und das gibt mir auch Kopfschmerzen :( –

Antwort

8

die invariant culture für die Formatierung angeben:

Console.WriteLine(abc.ToString("N2", CultureInfo.InvariantCulture)); 

Es ist immer noch es aber zu 1,234.57 gehen aufrunden. Jetzt wird das Komma gedruckt, weil Sie explizit das Format "N" angegeben haben, das Tausendertrennzeichen enthält.

Wenn Sie „F2“ verwenden wird „1234,57“ geben:

Console.WriteLine(abc.ToString("F2", CultureInfo.InvariantCulture)); 

Ich bin nicht sicher, der beste Weg, um es von Aufrunden zu stoppen ...

+1

Oder besser noch, geben Sie die genaue Kultur, die Sie wollen. – Gabe

+0

Das Problem ist immer noch das gleiche. Ich will keine "," oder "." Im ganzzahligen Teil der Zahl! –

+0

Ich meine, das gibt mir 1.234,57 statt der gewünschten 1234.57 –

0

Sie können Math.Round verwenden wie dies:

double abc = 1234.5678; 
double rounded = Math.Round(abc, 2); 
Console.WriteLine(rounded); 

Und es wird nur zwei Nachkommastellen ausgeben.

+0

Josenator Ich dachte er wollte 1234.56 nicht 1234.57 Ich nehme an es hängt davon ab, wofür er die Nummer benutzen wird. Entweder hat er irrtümlich gesagt, dass er 1234.56 in seiner ursprünglichen Frage haben wollte oder die Kommentarantwort war falsch. –

+0

@Ramhound Es ist wahr Ich werde nicht das genaue Ergebnis geben, das er wollte, ich nahm an, dass er nur auf 2 Ziffern runden wollte. –

1

versuchen, diese

double abc = 1234.5678; 
    Console.WriteLine("{0}", Math.Floor(abc*100)/100); 
    Console.ReadKey(); 

// 1234,56

oder Ihre eigene Floor() Funktion

public double Floor(double value, int digits) 
    { 
     double n = Math.Pow(10, digits); 
     return Math.Floor(value * n)/n; 
    } 
+1

Ich nehme an, dass Sie Ihren Code getestet haben, gute Arbeit beim Lesen der Frage des Benutzers :-) –

+0

Meine Vermutung ist, Sie wollen 'Truncate' anstelle von' Floor'. – Gabe

+0

Ich habe den Code getestet und es funktioniert wie erwartet. 'Math.Floor()' funktioniert, indem man den Bruchteil eines Double striping. – ja72

Verwandte Themen