2010-12-06 6 views
1

Ich fühle mich wie das ist eine sehr noob Frage .. aber ich kann einfach nicht die richtige Aussage dafür bekommen.Erhalten Sie Zeichen hinter dem Punkt in einem Doppel

Für Anzeigezwecke möchte ich eine double in zwei teilen: den Teil vor dem Punkt und die ersten beiden Ziffern nach dem Punkt. Ich brauche es als string. Zielsprache: C#.

ZB: 2345.1234 wird "2345" und "12"

Ich weiß, wie das Teil vor dem Punkt zu bekommen, das ist einfach:

Math.Floor(value).ToString() 

... aber was ist der richtige Weg, um die Rolle zu bekommen " hinter dem Punkt "? Es muss eine schöne Art und Weise sein, dass auf einfache Art und Weise zu tun ...

Ich kann an nichts anderes denken, dann:

Math.Round(100 * (value - Math.Floor(value))).ToString("00"); 

Ich bin sicher, dass es einen besseren Weg, aber ich kann einfach nicht daran denken. Jemand?

+2

Es gibt sicherlich einen * besseren * Weg, da die Technik, die Sie gefunden haben, nicht * korrekt * ist. Es schlägt fehl, wenn das Double zum Beispiel negativ ist. –

+0

Das ist richtig, aber ich habe vergessen zu erwähnen, dass der Wert den Preis eines Produkts darstellt, was normalerweise positiv ist :) – Dirk

+2

Wenn Sie mit Geld zu tun haben, sollten Sie wahrscheinlich den Dezimaltyp in Betracht ziehen. Das hilft dir wahrscheinlich nicht wirklich, den Bruchteil der Zahl zu bekommen, aber es wird dir helfen, dein Geld aufrecht zu erhalten! – wageoghe

Antwort

5

Reguläre Ausdrücke (Regex) ist wahrscheinlich Sie die beste Wahl, aber die Mod-Operator kann eine weitere wertvolle Lösung sein ...

stuffToTheRight = value % 1 

Beifall.

+1

Das ist, was ich gesucht habe. Ich habe seit ein paar Jahren nicht programmiert und ich wusste, dass da dieses "Etwas" war. Ich meinte diesen guten alten Mod-Operator :) – Dirk

+1

um zwei Ziffern zu erhalten benutze: '(int) (stuffToTheRight * 100)' – Commodore63

0
use regex ".[0-9][0-9]" 
+1

Vorsicht: Dies funktioniert nicht, wenn Sie die Kultur für 'ToString()' nicht setzen und die Standardkultur ein Komma als Dezimaltrennzeichen hat. – svick

+1

Sollte '' \. [0-9] [0-9] "' weil "sein." passt auf ein beliebiges Zeichen. – Commodore63

4
// 
//Use the Fixed point formatting option. You might have a bit more work to do 
//if you need to handle cases where "dot" is not the decimal separator. 
// 
string s = value.ToString("F2", CultureInfo.InvariantCulture); 
var values = s.Split("."); 
string v1 = values[0]; 
string v2 = values[1]; 

Sehen Sie diesen Link, um mehr über die Formatierung: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

Hier einige ungetestete Code, der aktuelle Kultur zu berücksichtigen versucht:

// 
//Use the Fixed point formatting option. 
// 
string s = value.ToString("F2", CultureInfo.CurrentCulture); 
var values = s.Split(CultureInfo.NumberFormat.NumberDecimalSeparator); 
string v1 = values[0]; 
string v2 = values[1]; 
+1

+1 für die Berücksichtigung regionaler Einstellungen, was überraschend selten ist. –

0

In einer Zeile wird es sein:
string[] vals = value.ToString("f2").Split(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToCharArray());

vals[0]: vor dem Punkt.
vals[1]: nach Punkt.

Verwandte Themen